r语言 - $ 运算符对于使用 dygraph 和读取多个数据的 Shiny 中的原子向量无效



当我想在 R Shiny 中使用dygraph 绘制图形时,我在无效原子向量方面遇到了这个问题。输入可以通过选择输入选择,文件是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等。

我真的很感激任何帮助或瞥见,我已经尝试了很多东西。谢谢!!!

欢迎来到 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文件。最好只在需要时才阅读它们。

最新更新