2016-12-20 4 views
1

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

и вот мой server.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" в функции shinyUI.

Работы отлично для меня тогда.

+0

Эт, это сработало для вас? –

Смежные вопросы