2016-12-20 5 views
1

Ich habe Daten, die Datum, Temperatur und die Höhe enthält, bei der die Messung aufgezeichnet wurde. Ich versuche, ein einfaches reaktives Plot mit R Shiny zu erstellen, wobei sich das Plot abhängig von den Höhengrenzen ändert, an denen man interessiert ist. Sobald die Grenzen definiert sind, nimmt es den Mittelwert dieser Grenzen für jeden Tag und plottet sie. Hier ist ein Beispiel-Datensatz (Entschuldigung für wie lange umständliche es ist diese zu erzeugen):Fehler in Sequenzauswahl und Plotten - 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),] 

ich gesetzt habe mein Grundstück bis zu einer Seite Wunsch Sidebar und eine Hauptplatte, die die Handlung enthält.

Hier ist meine 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")) 
) 
) 

und hier ist mein 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) 
     }) 
    }) 

Wenn ich dies in R Shiny laufen, und wählen Sie die Daten, die ich interessiert bin , bekomme ich folgende Fehlermeldung:

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

Wenn ich führe ein ähnliches Skript den Datensatz basierend auf Probe zu bestimmten Terminen und Elevation und th Wenn es geplottet wird, funktioniert es gut. Das Problem scheint also bei meinem Shiny-Code zu liegen. Ich wäre dankbar, wenn mir jemand sagen könnte, wo ich falsch liege.

Antwort

1

versuchen, diese Zeilen zu Ihrem passData reaktiver Zugabe (die reaktive Initialisierung Warnungen behandelt):

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

und die mis-Schreibweise inputId = "maxmimumElevation" in Ihrer shinyUI Funktion zu korrigieren.

Funktioniert gut für mich dann.

+0

Uh, hat das für Sie funktioniert? –