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