【问题标题】:$ operator is invalid for atomic vectors in shiny using dygraph and reading several data$ 运算符对于使用 dygraph 和读取多个数据的闪亮原子向量无效
【发布时间】:2019-10-09 23:23:21
【问题描述】:

当我想在 R Shiny 中使用 dygraph 绘制图形时,我遇到了无效原子向量的问题。输入可以通过 SelectInput 选择,文件以 CSV 格式保存在我的目录中。这基本上是我试图使其工作的 UI 和服务器之间的连接。

我已经阅读了答案,我知道这是 R 的一个错误,它没有很好地标记,这就是为什么我还没有弄清楚如何解决它的原因。

ui <- dashboardPage(
  fluidPage(

      fluidRow(
          column(3,
               "sidebar",

               fluidPage(
                 wellPanel(height =500),
                 box(selectInput("period", "Choose Year:",
                                     c("2006" = "2006", 
                                       "2007" = "2007",
                                       "2008" = "2008",
                                       "2009" = "2009"
                                       )),
                     width=NULL),

                wellPanel(height =300)
                 )
          ),

        column (9,
               "main",
           fluidPage(
                wellPanel(width = "100%", height = "100%",
                  dygraphOutput("PerYear")
                 )
               )
          )
      )


server <- function(input, output, session) {
 output$PerYear <- renderDygraph({

reading_csv <- function (year) {

    csvpath <- "./xts_folder/"

     y <-read.csv(paste0(csvpath,year,"_RW.csv"),header=TRUE, sep=",")
     ytime <- mdy_hm(y[["timestampUTC"]], tz="UTC")
     y_xts <- xts(y, order.by = ytime)
     ts.sn.year<-dygraph(y_xts)%>% dyRangeSelector()
      return(ts.sn.year)
   }

  if(input$period == "2006" ){
     y<-2006
     pyear<-reading_csv(year = y) 
     pyear
    }

  else if(input$period == "2007" ){
    y<-2007
    pyear<-reading_csv( year = y) 
    pyear
  }

  else if(input$period == "2008" ){
    y<-2008
    pyear<-reading_csv(year=y) 
    pyear

  }
   else if(input$period == "2009" ){
     y<-2009
     pyear<-reading_csv(year=y) 
     pyear
   }   

  }
  )
}

也许有一些错误,因为我删除了其余的代码,但主要部分是 dygraph 的渲染和输出的连接。 CSV 文件可能如下所示:

timestampUTC,max
1/1/2006 0:50,0.7
1/1/2006 1:50,6.4
1/1/2006 2:50,7.5
1/1/2006 3:50,0.3
1/1/2006 4:50,0
1/1/2006 5:50,0.2
1/1/2006 6:50,0.7
1/1/2006 7:50,1.5
1/1/2006 8:50,0.5
1/1/2006 9:50,0.4
1/1/2006 10:50,0.3
1/1/2006 11:50,1.6
1/1/2006 12:50,0.7
1/1/2006 13:50,1.6
1/1/2006 14:50,0.6
1/1/2006 15:50,0.2
1/1/2006 16:50,0.4
1/1/2006 17:50,0.7

例如,从代码中可以看出,它们以相同的名称格式存储:2006_RW、2007_RW 等。

非常感谢任何帮助或一瞥,我已经尝试了很多东西。谢谢!!!

【问题讨论】:

    标签: r shiny atomic


    【解决方案1】:

    欢迎来到 SO!

    我稍微清理了你的 UI。

    请检查以下内容:

    # Create files ------------------------------------------------------------
    
    csvpath <- "./xts_folder/"
    
    if(!dir.exists(csvpath)){
      dir.create(csvpath)
    }
    
    DF <- data.frame(stringsAsFactors=FALSE,
                     timestampUTC = c("1/1/2006 0:50", "1/1/2006 1:50", "1/1/2006 2:50",
                                      "1/1/2006 3:50", "1/1/2006 4:50", "1/1/2006 5:50",
                                      "1/1/2006 6:50", "1/1/2006 7:50", "1/1/2006 8:50", "1/1/2006 9:50",
                                      "1/1/2006 10:50", "1/1/2006 11:50", "1/1/2006 12:50",
                                      "1/1/2006 13:50", "1/1/2006 14:50", "1/1/2006 15:50",
                                      "1/1/2006 16:50", "1/1/2006 17:50"),
                     max = c(0.7, 6.4, 7.5, 0.3, 0, 0.2, 0.7, 1.5, 0.5, 0.4, 0.3, 1.6,
                             0.7, 1.6, 0.6, 0.2, 0.4, 0.7)
    )
    DF
    write.csv(DF, file = file.path(csvpath, "/2006_RW.csv"), row.names = FALSE, quote = FALSE)
    
    DF$timestampUTC <- gsub("2006", "2007", DF$timestampUTC)
    DF$max <- runif(18)
    write.csv(DF, file = file.path(csvpath, "/2007_RW.csv"), row.names = FALSE, quote = FALSE)
    
    DF$timestampUTC <- gsub("2007", "2008", DF$timestampUTC)
    DF$max <- runif(18)
    write.csv(DF, file = file.path(csvpath, "/2008_RW.csv"), row.names = FALSE, quote = FALSE)
    
    DF$timestampUTC <- gsub("2008", "2009", DF$timestampUTC)
    DF$max <- runif(18)
    write.csv(DF, file = file.path(csvpath, "/2009_RW.csv"), row.names = FALSE, quote = FALSE)
    
    
    # App ---------------------------------------------------------------------
    
    library(shiny)
    library(shinydashboard)
    library(dygraphs)
    library(lubridate)
    library(xts)
    
    ui <- dashboardPage(
      dashboardHeader(),
      dashboardSidebar(selectInput(
          "period",
          "Choose Year:",
          c(
            "2006" = "2006",
            "2007" = "2007",
            "2008" = "2008",
            "2009" = "2009"
          )
        )
      ),
      dashboardBody(
        wellPanel(
          width = "100%",
          height = "100%",
          dygraphOutput("PerYear")
        )
      )
    )
    
    server <- function(input, output, session) {
      output$PerYear <- renderDygraph({
        reading_csv <- function (year) {
          csvpath <- "./xts_folder/"
    
          y <- read.csv(paste0(csvpath, year, "_RW.csv"), header = TRUE, sep = ",")
          ytime <- mdy_hm(y[["timestampUTC"]], tz = "UTC")
          y_xts <- xts(y, order.by = ytime)
          ts.sn.year <- dygraph(y_xts) %>% dyRangeSelector()
          return(ts.sn.year)
        }
    
        if (input$period == "2006") {
          y <- 2006
          pyear <- reading_csv(year = y)
          pyear
        }
    
        else if (input$period == "2007") {
          y <- 2007
          pyear <- reading_csv(year = y)
          pyear
        }
    
        else if (input$period == "2008") {
          y <- 2008
          pyear <- reading_csv(year = y)
          pyear
    
        }
        else if (input$period == "2009") {
          y <- 2009
          pyear <- reading_csv(year = y)
          pyear
        }
      })
    }
    
    shinyApp(ui, server)
    

    但是,我建议您每次要更新绘图时都读取 csv 文件。最好只在需要时阅读它们。

    【讨论】:

    • 您好,谢谢您的回答,但我仍然没有发现错误。 UI 中的错误究竟是什么?仅在需要时阅读它们是什么意思?只有一个文件?
    • 嗨!我找到了一种让它工作的方法,我退出了函数,并在每个 if 语句中实际绘制了 dygraph,现在可以很好地阅读它们。我仍然对您的最后建议感到好奇,非常感谢您
    • 我建议在应用程序启动时读取数据,以避免一遍又一遍地读取它们——只要数据不是太大。对于更多数据,您可能需要考虑数据库。 PS $ operator is invalid for atomic vectors 通常是空输入的结果 - 但如果没有您的数据,问题就无法重现。
    猜你喜欢
    • 2019-04-29
    • 2021-08-23
    • 1970-01-01
    • 1970-01-01
    • 2018-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多