Показать неконтролируемый вывод на основе выбранного диапазона дат

Я не могу использовать диапазон дат, чтобы выборочно отображать непредсказуемые результаты. При запуске приложения значения диапазона дат по умолчанию не выбираются, что приводит к ошибке выдачи значения NULL.

Посоветуйте, пожалуйста, как я могу это исправить.

library(shiny)
library(lubridate)
library(rhandsontable)


ui <- shinyUI(fluidPage(

    mainPanel(
      uiOutput("date_range"),
      br(),
      rHandsontableOutput("hot")

    )
  )
)


server <- shinyServer(function(input, output){


  start_date <- as.Date(dmy("01-Jan-2018"), tz = "UTC")
  end_date <- as.Date(dmy("10-Jan-2018"), tz = "UTC")

  DF <- data.frame(Date = seq.Date(start_date, end_date, by = 1),
                   value = 1:10, stringsAsFactors = FALSE)

  output$date_range <- renderUI({
    fluidRow(
      dateRangeInput(inputId = "dates", label = paste0("Enter Date Range"), start = start_date + 1, end = end_date - 1,
                     min = start_date, max = end_date, format = "dd-mm-yyyy")
    )
  })

  DF_selected <- reactive({
    date_vec <-DF$Date
    out <- DF[which((date_vec >= input$dates[1]) & (date_vec <= input$dates[2])),]
    return(out)
  })

  hot_mat <- reactive({
    if(is.null(input$hot)){
      DF = DF_selected()
    }else{
      DF = hot_to_r(input$hot)
    }
    return(DF)
  })

  output$hot <- renderRHandsontable({
    DF_out <- hot_mat()
    rhandsontable(DF_out, useTypes = TRUE) %>% hot_col(col = 1, readOnly = TRUE)
  })

})

runApp(list(ui=ui, server=server))

1 ответ

Это похоже на работу:

server <- shinyServer(function(input, output){


  start_date <- as.Date(dmy("01-Jan-2018"), tz = "UTC")
  end_date <- as.Date(dmy("10-Jan-2018"), tz = "UTC")

  DF <- data.frame(Date = seq.Date(start_date, end_date, by = 1),
                   value = 1:10, stringsAsFactors = FALSE)

  output$date_range <- renderUI({
    fluidRow(
      dateRangeInput(inputId = "dates", label = paste0("Enter Date Range"), start = start_date + 1, end = end_date - 1,
                     min = start_date, max = end_date, format = "dd-mm-yyyy")
    )
  })

  DF_selected <- reactive({
    date_vec <-DF$Date
    out <- DF[which((date_vec >= input$dates[1]) & (date_vec <= input$dates[2])),]
    return(out)
  })



  output$hot <- renderRHandsontable({
    DF_out <- DF_selected()
    rhandsontable(DF_out, useTypes = TRUE) %>% hot_col(col = 1, readOnly = TRUE)
  })

})

runApp(list(ui=ui, server=server))
Другие вопросы по тегам