我希望根据评估sys.Date()与具有一系列日期的数据框来解决在下拉列表(SelectInput)列表中显示默认值的问题。
DF1:
code date group
10001 2015-10-07 a
10005 2015-10-11 b
10022 2015-10-18 c
10032 2015-10-23 d
10044 2015-10-30 a
创建第二个df来评估今天的日期(发生的时间为2015-10-18)
active.date=as.data.frame((Sys.Date()))
names(active.date)[1]<-"date"
active.date$date=as.Date(active.date$date)
我确定可能会采用稍微清洁的方式,但它有效......
我知道:
match(active.date$date,df1$date)
将返回匹配的正确行,也许是我需要前往的地方...
在UI方面,我有:
selectInput("get.id",label="ID NUMBER", setNames(as.list(df1$code),df1$date)),
actionButton("submit", "SUBMIT")
下拉列表中显示的第一个值只是数据框中的第一个项目:
2015-10-07
我希望实现的是将下拉列表中的默认值恢复为活动日期(对于今天的示例)当匹配时:
2015-10-18
并在没有匹配时从列表中返回第一个项目。我仍然希望在下拉列表中返回所有可能的值(以便可以选择所有日期),理想情况下,它会保持正确的日期序列出现以便它们出现。
答案 0 :(得分:1)
我会在加载应用程序时订购数据。并相应地渲染选择输入。
library(shiny)
shinyApp(
shinyUI(
fluidPage(
uiOutput('getter'),
actionButton('submit', 'SUBMIT')
)
),
shinyServer(function(input, output, session) {
today <- Sys.Date()
dat <- reactive({
ind <- match(today, as.Date(df1$date), FALSE)
if (ind) df1[c(ind, seq_len(nrow(df1))[-ind]), ]
else df1
})
output$getter <- renderUI({
selectInput('get.id', label="ID NUMBER", choices=as.character(dat()$date))
})
})
)
或者,您可以将选择保留为被动并使用
choices <- reactive({
ind <- match(today, as.Date(df1$date), FALSE)
if (ind) df1$date[c(ind, seq_len(nrow(df1))[-ind])]
else df1$date
})
output$getter <- renderUI({
selectInput('get.id', label="ID NUMBER", choices=as.character(choices()))
})