R 默认更新的数据输入不';我无法继续前进
我有一个简单的应用程序,它使用了一个动态UI元素,R 默认更新的数据输入不';我无法继续前进,r,shiny,R,Shiny,我有一个简单的应用程序,它使用了一个动态UI元素,updateDateInput,以确保用户只能选择指定年份中的日期。所选日期应始终默认为所选年份的第一天 library(shiny) library(tidyverse) library(lubridate) ui <- fluidPage( selectInput("year", "Select Year:", choices = 2010:2020, selec
updateDateInput
,以确保用户只能选择指定年份中的日期。所选日期应始终默认为所选年份的第一天
library(shiny)
library(tidyverse)
library(lubridate)
ui <- fluidPage(
selectInput("year", "Select Year:",
choices = 2010:2020, selected = 2015),
dateInput("date", "Select Date:", value = NULL)
)
server <- function(input, output, session) {
observeEvent(input$year,
updateDateInput(session, "date",
min = ymd(paste(input$year, "01-01", sep = "-")),
max = ymd(paste(input$year, "12-31", sep = "-")),
value = ymd(paste(input$year, "01-01", sep = "-"))))
}
shinyApp(ui, server)
库(闪亮)
图书馆(tidyverse)
图书馆(lubridate)
ui这是一个令人讨厌的问题,当它发生在我身上时,我花了很长时间才找到它。问题在于,updateDateInput
似乎做出了非原子性的更改。也就是说,它们不会同时发生,而是按顺序发生。因此,当一次更改输入小部件的多个参数时,值可能暂时无效
诀窍是确保所选日期在更新期间始终有效。这意味着要分两个阶段进行更改,并且更改的顺序取决于您在时间上是向前移动还是向后移动
这里有一个有效的解决方案
library(shiny)
library(tidyverse)
library(lubridate)
ui <- fluidPage(
selectInput("year", "Select Year:",
choices = 2010:2020, selected = 2015),
dateInput("date", "Select Date:", value = NULL)
)
server <- function(input, output, session) {
observeEvent(input$year, {
req(input$date, input$year)
# Are we going backwards or forwards?
if (as.numeric(input$year > year(input$date))) {
updateDateInput(
session,
"date",
max = ymd(paste(input$year, "12-31", sep = "-")),
value = ymd(paste(input$year, "01-01", sep = "-")),
)
updateDateInput(
session,
"date",
min = ymd(paste(input$year, "01-01", sep = "-"))
)
} else {
updateDateInput(
session,
"date",
min = ymd(paste(input$year, "01-01", sep = "-")),
value = ymd(paste(input$year, "01-01", sep = "-"))
)
updateDateInput(
session,
"date",
max = ymd(paste(input$year, "12-31", sep = "-"))
)
}
})
}
shinyApp(ui, server)
库(闪亮)
图书馆(tidyverse)
图书馆(lubridate)
很抱歉反应太慢。这太棒了。非常感谢!