2015-10-06 121 views
2

我在RStudio中使用'闪亮'。R:闪亮 - 更新dateRangeInput开始和结束

我希望dateRangeInput小部件的预选日期更新为数据集的最小值和最大值。
当我尝试下面的代码(仅针对开始日期简化)时,开始日期不会显示在日期范围窗口小部件的左侧框中:相反,框显示为空白(但实际上它设置为今天的日期 - 在点击空白框时,显示今天日期的日历)。
ui.r:dateRangeInput( “日期”,标签= “日期范围”,开始= 'mydatestart',端= '2014年5月6日')

最小日期实际选择,因为它显示textOutput( 'mydatestart')

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

 
library(shiny) 

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

server.R使用
ui.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 < -renderText(as.Date(分钟(指明MyDate)))给出了同样的问题。

你知道这是为什么发生吗?
谢谢, 伊凡

回答

1

你可以把你dateRangeInputserver.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) 
3
  1. 你不能传递一个字符串常量像mydatestart作为参数传递给dateRangeInput,因为它会解释为仅仅是 - 一个字符串 - 这就是为什么start领域是空的。你需要给它一个合法的价值。
  2. 您的shinyUI调用中缺少一些关键功能,如下面的注释所示。
  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 
    ) 
    }) 
}) 

全球。[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

+0

感谢您的快速响应。它在这个例子中确实有效。但是,如何在server.R中使用* output *对象(如示例中的*'mydatestart'*)获得相同的结果? 我想将此小部件用作用户上传数据集的更大闪亮应用的一部分。然后,dateRangeInput小部件将需要从该上传的数据集中获取最小和最大日期。你建议在server.R中使用renderUI()吗? – YGS

+0

@YGS当然,看我更新的答案。 – nrussell

+0

我不能标记它,但你的脚本也是一个很好的答案,在ui.R中使用* uiOutput()*而不是*在@ Andriy_T中的* htmlOutput()* – YGS