Ошибка в выборе последовательности и построении графика - 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"
в вашей функцииручение.
Работает нормально для меня тогда.