【问题标题】:R: Shiny - update dateRangeInput start and endR: Shiny - 更新 dateRangeInput 开始和结束
【发布时间】: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 会出现同样的问题。

你知道为什么会这样吗?
谢谢, 伊万

【问题讨论】:

    标签: r shiny


    【解决方案1】:
    1. 您不能将像mydatestart 这样的字符串文字作为参数传递给dateRangeInput,因为它会解释为字符串,这就是start 字段为空的原因。你需要给它一个合法的值。
    2. 在您的shinyUI 调用中缺少几个关键功能,如下面的 cmets 所示。
    3. 将全局数据对象放在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 siteuiOutput 旨在与服务器端的 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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-27
      相关资源
      最近更新 更多