序列选择和绘图中的错误 - R Shiny

时间:2016-12-20 21:13:47

标签: r plot shiny seq

我有数据,包括日期,温度和记录测量的高程。我正在尝试使用R Shiny创建一个简单的反应图,其中图根据人们感兴趣的高程边界而变化。一旦定义了边界,它就会获取每天这些边界的平均值并绘制它们。这是一个示例数据集(对于生成它的多长时间道歉):

day <- seq.Date(as.Date("2016-01-01"),as.Date("2016-12-31"),by='day')
temperature_c <- runif(366,0,35)
sonde.elev <- 215  
df.1 <- data.frame(day,sonde.elev,temperature_c)
sonde.elev <- 220
df.2 <- data.frame(day,sonde.elev,temperature_c)
sonde.elev <- 225
df.3 <- data.frame(day,sonde.elev,temperature_c)
sonde.elev <- 230
df.4 <- data.frame(day,sonde.elev,temperature_c)
sonde.elev <- 235
df.5 <- data.frame(day,sonde.elev,temperature_c)
sonde.elev <- 240
df.6 <- data.frame(day,sonde.elev,temperature_c)
sonde.elev <- 245
df.7 <- data.frame(day,sonde.elev,temperature_c)
sonde.elev <- 250
df.8 <- data.frame(day,sonde.elev,temperature_c)
sonde.elev <- 255
df.9 <- data.frame(day,sonde.elev,temperature_c)
sonde.elev <- 260
df.10 <- data.frame(day,sonde.elev,temperature_c)
sonde.elev <- 265
df.11 <- data.frame(day,sonde.elev,temperature_c)
sonde.elev <- 270
df.12 <- data.frame(day,sonde.elev,temperature_c)
sonde.elev <- 275
df.13 <- data.frame(day,sonde.elev,temperature_c)
sonde.elev <- 280
df.14 <- data.frame(day,sonde.elev,temperature_c)
sonde.elev <- 285
df.15 <- data.frame(day,sonde.elev,temperature_c)
sonde.elev <- 290
df.16 <- data.frame(day,sonde.elev,temperature_c)
campbell_out <- rbind(df.1,df.2,df.3,df.4,df.5,df.6,df.7,df.8,df.9,df.10,df.11,df.12,df.13,df.14,df.15,df.16)
campbell_out <- campbell_out[order(campbell_out$day),] 

我已经设置了我的情节,有一个页面愿望侧栏和一个包含情节的主面板。

这是我的ui.R:

#===================
# ui.R
#===================

library(shiny)

shinyUI(pageWithSidebar(
  headerPanel("Stack Overflow Lough"),
sidebarPanel(
  dateRangeInput(inputId = "dateRange",
                 label = "Date Range",
                 start = "2016-01-01",
                 max = Sys.Date()
                 ),
  sliderInput(inputId = "minimumElevation",
              label="Feet (ASL) - Minimum",
              min = 215,
              max = 290,
              value = 215,
              step = 1),
  sliderInput(inputId = "maxmimumElevation",
              label="Feet (ASL) - Maximum",
              min = 215,
              max = 290,
              value = 290,
              step = 1)  
  ),
mainPanel(plotOutput("theGraph"))
 )
)

这是我的服务器.R:

#===================
# server.R
#===================
library(plyr)
    shinyServer(function(input,output){
      passData <- reactive({
        campbell_out <- campbell_out[campbell_out$day %in%
                                       seq.Date(input$dateRange[1],
                                                input$dateRange[2], by = "days"),]
        campbell_out <- campbell_out[campbell_out$sonde.elev %in%
                                       seq(as.numeric(input$minimumElevation),
                                       as.numeric(input$maximumElevation), by=0.000001),]
        campbell_out
      })

      output$theGraph <- renderPlot({
        graphData <- ddply(passData(),.(day),numcolwise(mean))
        theGraph <- plot(temperature_c~day,data=graphData, ylab = "Temperature (c)", xlab = "Time")
        print(theGraph)
      })
    })

当我在R Shiny中运行此选项并选择我感兴趣的日期时,我收到以下错误:

Warning: Error in seq.default: 'to' must be of length 1

当我运行类似的脚本来根据特定的日期和高程对数据集进行采样,然后绘制它时,它可以正常工作。所以这个问题似乎与我的Shiny代码有关。如果有人能告诉我哪里出错了,我将不胜感激。

1 个答案:

答案 0 :(得分:1)

尝试将这些行添加到passData被动(处理反应性初始化警告):

  passData <- reactive({
    req(input$dateRange[1])
    req(input$dateRange[2])
    req(input$minimumElevation)
    req(input$maximumElevation)
    campbell_out <- campbell_out[campbell_out$day %in%
                                   seq.Date(input$dateRange[1],
                                            input$dateRange[2],by = "days"),]
    print(as.numeric(input$minimumElevation))
    print(as.numeric(input$maximumElevation))
    campbell_out <- campbell_out[campbell_out$sonde.elev %in%
                                   seq(as.numeric(input$minimumElevation),
                                       as.numeric(input$maximumElevation),by = 0.000001),]
    campbell_out
  })

并纠正你的shinyUI函数中inputId = "maxmimumElevation"的错误拼写。

然后适合我。