R:Shiny - 更新dateRangeInput的开始和结束

时间:2015-10-06 17:16:21

标签: r shiny

我在RStudio中使用'闪亮'。

我希望使用数据集的最小值和最大值更新dateRangeInput小部件的预选日期。
当我尝试下面的代码(仅针对开始日期进行简化)时,开始日期不显示在日期范围小部件的左侧框中:相反,该框显示为空白(但它实际上设置为今天的日期 - 单击时在空盒子上,显示今天日期的日历)。
ui.r:dateRangeInput(“dates”,label =“Date range”,start ='mydatestart',end ='2014-05-06')

实际选择了最小日期,因为它在使用时显示出来 ui.r:textOutput('mydatestart')

这是一个可重复的例子:
ui.R

library(shiny)

shinyUI({
  sidebarPanel(
  dateRangeInput("dates", label = "Date range", start='mydatestart', end = '2014-05-06'),
  textOutput('mydatestart')
  )
}) 

server.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))
})

使用输出$ mydatestart&lt; -renderText(as.Date(min(mydate)))会出现同样的问题。

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

2 个答案:

答案 0 :(得分:4)

  1. 您不能将mydatestart之类的字符串文字作为参数传递给dateRangeInput,因为它会解释为 - 字符串 - 这就是start字段为空的原因。你需要给它一个合法的价值。
  2. 您的shinyUI来电中缺少一些关键功能,请在下方留言。
  3. 将全局数据对象放在global.R文件中用于闪亮的应用程序,而不是在shinyServer函数内定义它们,这是更惯用的。
  4. 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")
    

    enter image description here

    enter image description here

答案 1 :(得分:1)

您可以将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)