#css #r #shiny #r-markdown #flexdashboard
Вопрос:
У меня есть панель мониторинга rmarkdown, построенная с помощью flexdashboard, где глобальная боковая панель со множеством входов подходит для большинства страниц, но есть одна или две, где требуется другая боковая панель. Есть ли способ переопределить глобальную боковую панель только для одной отдельной страницы или, в качестве альтернативы, запретить отображение глобальной боковой панели на одной конкретной странице?
В качестве примера, следующее почти приводит меня к этому, но отображает глобальную и локальную боковые панели как перекрывающиеся на странице 3, плюс добавляет нечетный столбец пробелов.
--- title: "My Page" output: flexdashboard::flex_dashboard runtime: shiny --- Sidebar {.sidebar} ===================================== ```{r} checkboxGroupInput(inputId = "options", label = "Some Options:", choices = c("One", "Two", "Three"), selected = c("One", "Two", "Three")) ``` Page 1 ===================================== Column ------------------------------------- ### Some things here. Page 2 ===================================== Column ------------------------------------- ### Some other things here. Page 3 ===================================== Inputs {.sidebar} ------------------------------------- ```{r} checkboxGroupInput(inputId = "diff_options", label = "Some Different Options:", choices = c("a", "b", "c"), selected = c("a", "b", "c")) ``` Column ------------------------------------- ### Some very different things here.
Выглядит так.
Я знаю, что могу решить эту проблему, просто создав на каждой странице собственную боковую панель, но их десятки, и это будет довольно обременительно.
Ответ №1:
Я использовал другой пример в приложении shinyApp, которое я недавно использовал. В основном вы помещаете содержимое разных боковых панелей в отдельные панели условий и добавляете идентификатор в панель вкладок.
В этом приложении всякий раз, когда вы меняли вкладку, селектор на боковой панели будет изменяться программно
library(DT) library(shiny) library(dplyr) ui lt;- fluidPage( titlePanel("Test"), sidebarLayout( sidebarPanel( conditionalPanel(condition = "input.tabselected==1", selectInput("select_group", label = "Select a Group", choices = c("Group 1", "Group 2"), selected = "Group 1") ), conditionalPanel(condition = "input.tabselected==2", selectInput("select_group2", label = "Select a Group", choices = c("Group 3", "Group 4"), selected = "Group 3") ) ), mainPanel( tabsetPanel( tabPanel("DataTable", value =1, DTOutput("my_datatable")), tabPanel("Another", value = 2, verbatimTextOutput("text")), id="tabselected" ) ) ) ) server lt;- function(input, output){ v lt;- reactive({ req(input$select_group) if(input$select_group == "Group 1") { data lt;- tibble(`Rows`= paste("Row", 1:4), `Column 1` = rep(0,4)) } else { data lt;- tibble(`Rows`= paste("Row", 1:5), `Column 1` = rep(0,5)) } }) output$my_datatable lt;- renderDT({ req(v()) DT::datatable(v(), options = list( searching = F, paging = F, ordering = F, info = F ), editable = TRUE, rownames = NULL ) }) } shinyApp(ui = ui, server = server)
Комментарии:
1. Это кажется многообещающим, но мне трудно заставить его работать в приведенном мною примере. Есть какие-нибудь предложения? Я пробовал это…
conditionalPanel(condition = "page_no == 'Page 1'", checkboxGroupInput(inputId = "options1", label = "Some Options:", choices = c("One", "Two", "Three"), selected = c("One", "Two", "Three")))
но это всегда видно. Я думаю, я не знаю, как сделать выбор страницы условием…