Ошибка в выборе последовательности и построении графика - R Shiny

У меня есть данные, которые включают дату, температуру и высоту, на которой было записано измерение. Я пытаюсь создать простой реактивный график, используя 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

Когда я запускаю аналогичный сценарий для выборки набора данных на основе определенных дат и высоты, а затем строю его, он работает нормально. Таким образом, проблема, кажется, с моим блестящим кодом. Я был бы благодарен, если бы кто-то мог сказать мне, где я иду не так.

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
  })

и исправляя неправильное написание inputId = "maxmimumElevation" в вашей функцииручение.

Работает нормально для меня тогда.

Другие вопросы по тегам