#r #shiny
#r #блестящий
Вопрос:
Ниже у меня есть пример кода, показывающий два dateRangeInput
. Выбранные даты второго dateRangeInput
зависят от первого dateRangeInput
. Вот та же версия на Shinyapps.io (https://yuchenw.shinyapps.io/shiny_daterange /).
Странное поведение, которое я хотел бы продемонстрировать, заключается в том, что если я вручную изменил значения даты в первом, dateRangeInput
второе dateRangeInput
становится NA.
Например, если я выбрал дату в первом dateRangeInput
, приложение может успешно обновить второй dateRangeInput
.
Однако, если я вручную удалю значения даты в поле ввода первого dateRangeInput
, а затем введу новое значение даты, значения даты во втором dateRangeInput
станут NA
такими.
Это кажется нежелательным поведением, поскольку я ожидаю, что эти два метода выбора (с использованием календаря или изменения вручную) должны быть одинаковыми. Пожалуйста, дайте мне знать, если я смогу исправить это поведение.
library(shiny)
# Create the ui
ui <- fluidPage(
dateRangeInput(inputId = "date_input1", label = "Select Date Range 1",
start = "2000-01-01", end = "2019-12-31",
min = "2000-01-01", max = "2019-12-31"),
verbatimTextOutput(outputId = "date_output1"),
dateRangeInput(inputId = "date_input2", label = "Select Date Range 1",
start = "2000-01-01", end = "2019-12-31",
min = "2000-01-01", max = "2019-12-31"),
verbatimTextOutput(outputId = "date_output2")
)
# Create the server
server <- function(session = session, input = input, output = output){
# Update the date selection in date_input2
observe({
updateDateRangeInput(session = session, inputId = "date_input2", label = "Select Date Range 1",
start = input$date_input1[[1]], end = input$date_input1[[2]],
min = "2000-01-01", max = "2019-12-31")
})
# Print the selected date
output$date_output1 <- renderText({
paste(input$date_input1[[1]], input$date_input1[[2]], sep = " - ")
})
output$date_output2 <- renderText({
paste(input$date_input2[[1]], input$date_input2[[2]], sep = " - ")
})
}
# Run the application
shinyApp(ui = ui, server = server)
Ответ №1:
Добавьте эту строку перед вызовом updateDateRangeInput
req(input$date_input1[[1]],input$date_input1[[2]])
Проблема в том, что когда вы редактируете вручную, какое-то время дата формируется неправильно и по какой-то причине постоянно нарушает ввод второй даты. req()
Вызов просто настаивает на том, что там есть правильные значения, прежде чем обновлять второй ввод даты.