У меня есть следующие простые данные в CSV-файле с именем sampledata.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
при смене вкладок?