R: Shiny - 更新 dateRangeInput 开始和结束
Posted
技术标签:
【中文标题】R: Shiny - 更新 dateRangeInput 开始和结束【英文标题】:R: Shiny - update dateRangeInput start and end 【发布时间】:2016-01-03 17:09:17 【问题描述】:我在 RStudio 中使用“闪亮”。
我希望使用数据集的最小值和最大值更新 dateRangeInput 小部件的预选日期。 当我尝试下面的代码(仅针对开始日期进行了简化)时,开始日期不会显示在日期范围小部件的左侧框中:相反,该框显示为空白(但它实际上设置为今天的日期 - 单击在空框上显示带有今天日期的日历)。 ui.r: dateRangeInput("dates", label = "Date range", start='mydatestart', end = '2014-05-06')
实际选择了最小日期,因为它在使用时显示 ui.r: textOutput('mydatestart')
这是一个可重现的例子: ui.R
图书馆(闪亮) 闪亮的UI( 侧边栏面板( dateRangeInput("日期", label = "日期范围", start='mydatestart', end = '2014-05-06'), 文本输出('我的日期开始') ) )服务器.R
shinyServer(function(input, output)
mydate<-c("2013-04-24", "2013-04-25", "2013-04-26", "2013-04-27", "2013-04-28", "2013-04-28", "2013-04-29", "2013-04-30")
output$mydatestart<-renderText(min(mydate))
)
使用 output$mydatestart 会出现同样的问题。
你知道为什么会这样吗? 谢谢, 伊万
【问题讨论】:
【参考方案1】:-
您不能将像
mydatestart
这样的字符串文字作为参数传递给dateRangeInput
,因为它会解释为字符串,这就是start
字段为空的原因。你需要给它一个合法的值。
在您的shinyUI
调用中缺少几个关键功能,如下面的 cmets 所示。
将全局数据对象放在global.R
文件中用于闪亮的应用程序,而不是在shinyServer
函数中定义它们更习惯。
ui.R
library(shiny)
shinyUI(
## fluidPage(...)
fluidPage(
## sidebarLayout(...)
sidebarLayout(
sidebarPanel(
dateRangeInput(
"dates", label = "Date range",
start = min(mydate),
end = '2014-05-06'),
uiOutput("mydatestart2")
),
mainPanel(textOutput('mydatestart'))
)
)
)
server.R
library(shiny)
shinyServer(function(input, output)
# not accessable in UI
output$mydatestart <- renderText(min(mydate))
# accessable in UI
output$mydatestart2 <- renderUI(
dateRangeInput(
"dates2",
label = "Reactive Start Date",
start = as.Date(input$dates[1]) + 7,
end = as.Date(input$dates[1]) + 14
)
)
)
global.R
mydate <- c("2013-04-24", "2013-04-25", "2013-04-26",
"2013-04-27", "2013-04-28", "2013-04-28",
"2013-04-29", "2013-04-30")
【讨论】:
感谢您的快速回复。在这个例子中确实有效。但是,如何在 server.R 中使用 output 对象(如示例中的 'mydatestart')获得相同的结果?我想将此小部件用作用户上传数据集的更大闪亮应用程序的一部分。然后 dateRangeInput 小部件需要从上传的数据集中获取最小和最大日期。您是否建议在 server.R 中使用 renderUI() 代替? 我无法将其标记为这样,但您的脚本也是一个很好的答案,在 ui.R 中使用 uiOutput() - 而不是 htmlOutput() 在@Andriy_T 的 关于uiOutput
的好点,但我真的看不出与htmlOutput
的区别
来自shiny site:uiOutput 旨在与服务器端的 renderUI 一起使用。它目前只是 htmlOutput 的别名。所以是的,在未来的变化中使用uiOutput
是正确的,但现在没有区别
从未声称有区别。只是跟进我原来的答案。【参考方案2】:
您可以将dateRangeInput
放入server.R
,这样您就可以使用其中定义的任何对象作为参数:
library(shiny)
ui <- shinyUI(
sidebarPanel(
htmlOutput("selector"),
textOutput('mydatestart')
)
)
server <- shinyServer(function(input, output)
mydate<-c("2013-04-24", "2013-04-25", "2013-04-26", "2013-04-27", "2013-04-28", "2013-04-28", "2013-04-29", "2013-04-30")
output$mydatestart<-renderText(min(mydate))
output$selector <- renderUI(
dateRangeInput("dates", label = "Date range"
, start=min(mydate), end = '2014-05-06')
)
)
shinyApp(ui = ui, server = server)
【讨论】:
以上是关于R: Shiny - 更新 dateRangeInput 开始和结束的主要内容,如果未能解决你的问题,请参考以下文章
更新数据表头而不刷新整个应用程序(R,Shiny) dataTableProxy()
在 R 中用 Shiny 绘制散点图;情节没有更新,也没有完全互动
r shiny:从另一个 rhandsontable 更新 rhandsontable