2015-10-06 76 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