我在 Shiny 应用程序中有以下网格和选项卡结构。
我想要的是为我在左栏中选择的每个数据集都有一个不同的 tabsetPanel。
所以基本上我会有一个“主”左列 - 如果用户愿意,可以隐藏它 - 以及一个中央面板,其中针对左列上选择的数据集提供不同的选项卡。
这是当前代码:
library(shiny)
library(plotly)
library(gridlayout)
library(bslib)
ui <- grid_page(
layout = c(
"header header",
"sidebar Impost"
),
row_sizes = c(
"40px",
"1fr"
),
col_sizes = c(
"165px",
"1fr"
),
gap_size = "1rem",
grid_card(
area = "sidebar",
card_header("DATASET Simulator"),
card_body(
selectInput(
inputId = "dataset",
label = "DATASET",
choices = list(
"Dataset 1" = "Dataset 1",
"Dataset 2" = "Dataset 2",
"Dataset 3" = "Dataset 3"
),
selected = "Dataset 1",
width = "100%"
),
em("Select the type of dataset you want to simulate.")
)
),
grid_card_text(
area = "header",
content = "Dataset Simulation Project",
alignment = "start",
is_title = FALSE
),
grid_card(
area = "Impost",
full_screen = TRUE,
card_header("Dataset 1"),
card_body(
tabsetPanel(
nav_panel(title = "Parameters"),
nav_panel(title = "Results 1"),
nav_panel(title = "Results 2")
)
)
)
)
server <- function(input, output) {
}
shinyApp(ui, server)
我已经检查了 Mastering Shiny 书、大量互联网资源,并使用了新的 Shiny UI 编辑器,但我不知道如何实现它。
Shinydashboard允许您轻松创建这样的结构。
我希望这能起作用。
## app.R ##
library(shiny)
library(shinydashboard)
ui <- dashboardPage(
dashboardHeader(title = "Dataset Simulation Project"),
dashboardSidebar(
h3("Dataset Simulator"),
selectInput("dataset", label = h3("DATASET"),
choices = list( "Dataset 1" = "Dataset 1",
"Dataset 2" = "Dataset 2",
"Dataset 3" = "Dataset 3"),
selected = 1)
),
dashboardBody(
h2(uiOutput("selectedValue")),
tabsetPanel(type = "tabs",
tabPanel("Parameters", plotOutput("plot")),
tabPanel("Results 1", verbatimTextOutput("summary")),
tabPanel("Results 2", tableOutput("table"))
)
)
)
server <- function(input, output) {
# You can access the value of the widget with input$select, e.g.
output$selectedValue <- renderUI({
selected_option <- input$dataset
h2(selected_option)})
}
shinyApp(ui, server)
您可以使用
conditionalPanel()
来获得所需的输出。
library(shiny)
library(plotly)
library(gridlayout)
library(bslib)
ui <- grid_page(
layout = c(
"header header",
"sidebar Impost"
),
row_sizes = c(
"40px",
"1fr"
),
col_sizes = c(
"165px",
"1fr"
),
gap_size = "1rem",
grid_card(
area = "sidebar",
card_header("DATASET Simulator"),
card_body(
selectInput(
inputId = "dataset",
label = "DATASET",
choices = list(
"Dataset 1" = "Dataset 1",
"Dataset 2" = "Dataset 2",
"Dataset 3" = "Dataset 3"
),
selected = "Dataset 1",
width = "100%"
),
em("Select the type of dataset you want to simulate.")
)
),
grid_card_text(
area = "header",
content = "Dataset Simulation Project",
alignment = "start",
is_title = FALSE
),
grid_card(
area = "Impost",
full_screen = TRUE,
#card_header("Dataset 1"),
card_header(conditionalPanel( condition = "input.dataset == 'Dataset 1'", "Dataset 1"),
conditionalPanel( condition = "input.dataset == 'Dataset 2'", "Dataset 2"),
conditionalPanel( condition = "input.dataset == 'Dataset 3'", "Dataset 3")
),
card_body(
conditionalPanel( condition = "input.dataset == 'Dataset 1'",
tabsetPanel(id = "tabs1", type = c("tabs"),
nav_panel(title = "Parameters"),
nav_panel(title = "Results 1"),
nav_panel(title = "Results 2")
)
),
conditionalPanel( condition = "input.dataset == 'Dataset 2'",
tabsetPanel(id = "tabs2", type = c("tabs"),
nav_panel(title = "Parameters2"),
nav_panel(title = "Results 21"),
nav_panel(title = "Results 22")
)
)
)
)
)
server <- function(input, output) {
}
shinyApp(ui, server)
确实,您可以通过使用
shinydashboard
功能来实现相同的目的。