Reputation: 21
I want to render a interactive Slider or Time Selector in R-Shiny First I select A Variable from a list and according to that selection I want to choose the time intervals from that data.
library("shiny")
Dates = as.POSIXct(c("2018-09-27 23:00:00","2018-09-28 23:00:00","2018-09-29 23:00:00","2018-09-30 23:00:00","2018-10-01 23:00:00"))
ID = factor(c("2090493005FT", "00209049300S", "0209049300SE", "0209049300SE", "00020904930SE"))
df <- data.frame(ID = ID,Time = Dates)
ui <- fluidPage(
fluidRow(
column(width = 12, offset = 1,
selectInput("select", label = h3("Zaehlpunkt"),
choices = levels(df$ID),
selected = 1, multiple = TRUE
)
)
),
uiOutput("Slider")
)
server <- function(input, output, session) {
MinZeitSubset <- reactive({
ds<- subset(df,ID == input$select)
MinZeit <- min(df$Time)
return(MinZeit)
})
MaxZeitSubset <- reactive({
ds<- subset(df,Zaehlpunkt == input$select)
MaxZeit <- max(df$TIme)
return(MaxZeit)
})
output$Slider<-renderUI({dateRangeInput(inputId = "daterange",
label = "Zeitabschnitt",
start = MinZeitSubset,
end = MaxZeitSubset,
min = MinZeitSubset,
max = MaxZeitSubset,
autoclose = TRUE
)
})
}
shinyApp(ui,server)
I get this Error Message:
Error in as.vector: cannot coerce type 'closure' to vector of type 'character' [No stack trace available]
I was able to plot a datatable but I couldn't render a slider or data range object! Any help?
Upvotes: 2
Views: 255
Reputation: 10233
You need call the reactive functions with no arguments, i.e. MinZeitSubset()
and not MinZeitSubset
. So modifying your renderUI
to
output$Slider <- renderUI({dateRangeInput(inputId = "daterange",
label = "Zeitabschnitt",
start = MinZeitSubset(),
end = MaxZeitSubset(),
min = MinZeitSubset(),
max = MaxZeitSubset(),
autoclose = TRUE)
should work as MinZeitSubset
and MaxZeitSubset
are functions.
When I ran your code, I got the error that the Zaehlpunkt
was missing within the subsetting in MaxZeitSubset
. Using ID
instead gets everything to work:
library("shiny")
Dates = as.POSIXct(c("2018-09-27 23:00:00","2018-09-28 23:00:00","2018-09-29 23:00:00","2018-09-30 23:00:00","2018-10-01 23:00:00"))
ID = factor(c("2090493005FT", "00209049300S", "0209049300SE", "0209049300SE", "00020904930SE"))
df <- data.frame(ID = ID,Time = Dates)
ui <- fluidPage(
fluidRow(
column(width = 12, offset = 1,
selectInput("select", label = h3("Zaehlpunkt"),
choices = levels(df$ID),
selected = 1, multiple = TRUE
)
)
),
uiOutput("Slider")
)
server <- function(input, output, session) {
MinZeitSubset <- reactive({
ds <- subset(df,ID == input$select)
MinZeit <- min(df$Time)
return(MinZeit)
})
MaxZeitSubset <- reactive({
ds<- subset(df, ID == input$select)
MaxZeit <- max(df$TIme)
return(MaxZeit)
})
output$Slider<-renderUI({dateRangeInput(inputId = "daterange",
label = "Zeitabschnitt",
start = MinZeitSubset(),
end = MaxZeitSubset(),
min = MinZeitSubset(),
max = MaxZeitSubset(),
autoclose = TRUE
)
})
}
shinyApp(ui,server)
Upvotes: 1