【问题标题】:How to not reset Shiny dateRange when changing tab更改选项卡时如何不重置闪亮的日期范围
【发布时间】:2016-08-31 14:55:23
【问题描述】:

我在名为 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

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

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,它将不再保留我选择的日期。在上面的代码中,我知道subdata 中的if 语句似乎是多余的,如果我摆脱它,我的问题就会消失。但实际上我有一个更复杂的应用程序,子数据会根据选择的选项卡而改变。有没有办法在更改标签时保留if 语句但不重置daterange

【问题讨论】:

    标签: r shiny shinydashboard


    【解决方案1】:

    uiOutput('daterange') 移动到sidebarMenu

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

    或者你可以使用隔离

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

    【讨论】:

    • 这解决了问题,但随后daterange 在侧边栏上。我想把它留在体内。
    • 使用isolate 它应该可以工作我编辑了我的第一篇文章
    • 还是不行。 isolate 我遇到了同样的问题。
    猜你喜欢
    • 1970-01-01
    • 2020-12-23
    • 1970-01-01
    • 2020-12-17
    • 1970-01-01
    • 2014-05-15
    • 1970-01-01
    • 2015-11-29
    • 2015-12-24
    相关资源
    最近更新 更多