我正在開發一個應用程式,用戶需要通過許多選擇才能到達他/她想要進行資料分析的地方。應用程式需要通過無數選擇輕松地“匯集”用戶,而不會造成混淆,不會導致死胡同等。例如,將用戶從一般選擇匯集到更具體的選擇:
- 漏斗 1:非常一般的選擇(下面的第一張和第二張圖片:標簽 1 和標簽 2)
- 漏斗 2:不太常見的選擇(下面的第一張圖片:在側邊欄面板中)(第二張圖片:在子標簽中)
- 漏斗 3:最具體的選擇(下面的第一張圖片:主面板頂部的單選按鈕)(第二張圖片:在側邊欄面板中)
第一張圖片:

第二張圖片:

我的問題是,是否可以創建類似于我在第二張圖片中繪制的子面板的東西,以便為用戶選擇提供一個簡單的渠道(盡管比我的繪圖更漂亮)?如果不是,那么在 Shiny 中,通過選擇有效地吸參考戶的其他選項是什么(如果有的話)?我要去的地方是用戶從主面板頂部的選項卡 - 側邊欄 - 單選按鈕進入的第一張影像。
第一張圖片的可重現代碼:
library(shiny)
library(shinyjs)
ui <-
pageWithSidebar(
headerPanel("Test"),
sidebarPanel(
useShinyjs(),
fluidRow(helpText(h5(strong("Base Input Panel")),align="center")),
conditionalPanel(
condition="input.tabselected==1",
h5("Selections for Tab 1:")
),
conditionalPanel(
condition="input.tabselected==2",
h5("Selections for Tab 2:")
)
), # close sidebar panel
mainPanel(
useShinyjs(),
tabsetPanel(
tabPanel("Tab 1", value=1,helpText("Tab 1 outputs")),
conditionalPanel(condition = "input.tabselected==1",
fluidRow(helpText("Tab 1 things happen here")),
),
tabPanel("Tab 2", value=2,
fluidRow(
radioButtons(
inputId = 'mainPanelBtnTab2',
label = h5(strong(helpText("Functions to access:"))),
choices = c('Function 1','Function 2','Function 3'),
selected = 'Function 1',
inline = TRUE
) # close radio buttons
), # close fluid row
conditionalPanel(condition = "input.tabselected==2",
fluidRow(helpText("Tab 2 things happen here")),
conditionalPanel(condition = "input.mainPanelBtnTab2 == 'Function 1'",
helpText("You pressed radio button 1")),
conditionalPanel(condition = "input.mainPanelBtnTab2 == 'Function 2'",
helpText("You pressed radio button 2")),
conditionalPanel(condition = "input.mainPanelBtnTab2 == 'Function 3'",
helpText("You pressed radio button 3"))
) # close conditional panel
), # close tab panel
id = "tabselected"
) # close tabsetPanel
) # close mainPanel
) # close pageWithSidebar
server <- function(input,output,session)({})
shinyApp(ui, server)
uj5u.com熱心網友回復:
您可以將 a 嵌套tabsetPanel()在現有的tabPanel().
library(shiny)
shinyApp(
fluidPage(
sidebarLayout(
sidebarPanel(
"here is your sidebar",
uiOutput("tab_controls"),
uiOutput("subtab_controls")
),
mainPanel(
tabsetPanel(
tabPanel(
"Tab 1", br(),
tabsetPanel(
tabPanel("Function 1", "Here's the content for Tab 1, Function 1, with a `br()` between parents and sub-tab"),
tabPanel("Function 2", "Here's the content for Tab 1, Function 2, with a `br()` between parents and sub-tab"),
id = "subtab_1"
)
),
tabPanel(
"Tab 2",
tabsetPanel(
tabPanel("Function 1", "Here's the content for Tab 2, Function 1, with no space between tab levels"),
tabPanel("Function 2", "Here's the content for Tab 2, Function 2, with no space between tab levels"),
id = "subtab_2"
)
),
tabPanel("Tab 3", "Here's some orphaned content without sub-tabs"),
id = "parent_tabs"
)
)
)
),
function(input, output, session) {
output$tab_controls <- renderUI({
choices = if (input$parent_tabs == "Tab 1") {
c("choices", "for", "tab 1")
} else if (input$parent_tabs == "Tab 2") {
c("tab 2", "settings")
}
if (length(choices)) {
radioButtons(
"tab_controls",
"Controls",
choices = choices
)
}
})
output$subtab_controls <- renderUI({
if (input$parent_tabs == "Tab 2" & input$subtab_2 == "Function 1") {
radioButtons(
"subtab_controls",
"Additional controls for Tab 2, Function 1",
choices = letters[1:5]
)
} else if (input$parent_tabs == "Tab 2" & input$subtab_2 == "Function 2") {
selectInput(
"subtab_controls",
"Different input for Tab 2, Function 2",
choices = letters[6:10]
)
}
})
}
)
在這里,我在頂層有三個選項卡,選項卡 1-3。在選項卡 1 和選項卡 2 中,有tabsetPanels,每個選項卡都有兩個用于功能 1-2 的選項卡。
我還展示了兩種方法(還有其他方法,例如update____Input函式)來根據選擇的選項卡更改側邊欄中的控制元件。您應該使用 指定每個選項卡集tabsetPanel(..., id = "something")。然后您可以檢查input$something的值,這將是其選項卡之一的標題。

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/511693.html
標籤:r用户界面闪亮的
