更改选项卡时如何不重置闪亮的dateRange

时间:2016-08-31 14:55:24

标签: r shiny shinydashboard

我在名为sampledata.csv的csv中有以下简单数据,我在shinydashboard应用中使用了该数据。

date    category
1/1/2001    1M
1/2/2001    1M
1/3/2001    1M
1/4/2001    1M
1/5/2001    1M
1/1/2002    2M
1/2/2002    2M
1/3/2002    2M
1/4/2002    2M
1/5/2002    2M

我在shinydashboard文件中有以下app.R代码:

library(shiny)
library(shinydashboard)

ui <- dashboardPage(
  dashboardHeader(),
  dashboardSidebar(
    sidebarMenu(id='tab',
      menuItem('Tab 1', tabName='tab1'),
      menuItem('Tab 2', tabName='tab2')
    )
  ),
  dashboardBody(
    tabItems(
      tabItem(tabName='tab1',
        uiOutput('daterange')
      ),
      tabItem(tabName='tab2',
        verbatimTextOutput('range')
      )
    )
  )
)

sample <- read.csv('sampledata.csv')
sample$date <- as.Date(sample$date, '%m/%d/%Y')

server <- function(input, output, session) {
  #Observe which tab is selected
  observe({
    print(input$tab)
  })

  subdata <- reactive({
    #Subset to include only sample$category=='1M' when any tab is selected
    if(input$tab=="tab1" | input$tab=="tab2"){
      sample <- sample[which(sample$category=='1M'),]
    }
    return(sample)
  })

  output$daterange <- renderUI({
    #Set daterange to go from min to max of subdata()
    dateRangeInput(inputId='daterange', 
      label='Select Period', 
      min=min(subdata()$date), max=max(subdata()$date)
    )
  })

  output$range <- renderPrint(input$daterange)
}

shinyApp(ui, server)

我的问题是在使用该应用时,如果我从tab1更改为tab2daterange会重置。因此,如果在tab1我更改了开始日期或结束日期,然后点击tab2,则不再保留我选择的日期。在上面的代码中,我知道if中的subdata语句似乎是多余的,如果我摆脱它,我的问题就会消失。但实际上我有一个更复杂的应用程序,子数据将根据选择的选项卡而改变。更改标签时,有没有办法保留if语句但没有重置daterange

1 个答案:

答案 0 :(得分:0)

uiOutput('daterange')移至sidebarMenu

sidebarMenu(id='tab',
      menuItem('Tab 1', tabName='tab1'),
      menuItem('Tab 2', tabName='tab2'),
      uiOutput('daterange')
    )

或者你可以使用isolate

  output$range <- renderPrint(  isolate({input$daterange })  )