如何在 R Shiny 中实现这种网格和选项卡结构?

问题描述 投票:0回答:2

我在 Shiny 应用程序中有以下网格和选项卡结构。

Desired result

我想要的是为我在左栏中选择的每个数据集都有一个不同的 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 编辑器,但我不知道如何实现它。

r shiny shinydashboard
2个回答
0
投票

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)

0
投票

您可以使用

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
功能来实现相同的目的。
    

© www.soinside.com 2019 - 2024. All rights reserved.