如何仅使用列表名称创建 selectInput? (不显示列表内容)闪亮
Posted
技术标签:
【中文标题】如何仅使用列表名称创建 selectInput? (不显示列表内容)闪亮【英文标题】:How can I create a selectInput only with the names of a list? (without showing the content of the list) Shiny 【发布时间】:2021-07-29 12:12:59 【问题描述】:我有 3 个向量:
colors = c("blue", "red", "green", "yellow", "white", "black")
numbers = c("1", "2", "3", "4")
things = c("phone", "fridge", "computer", "chair", "table", "notebook", "bag", "jacket")
为了将它们全部放在一个列表中,我将它们加入到一个列表中。
list_options = list("colors" = colors, "numbers" = numbers, "things" = things)
我的主要目标是创建一个闪亮的应用程序,它的 SelectInput 仅包含列表名称(“颜色”、“数字”、“事物”)。但是,如果您单击其中一个选项,您将能够获得列表的值以便以后使用它们。
例如,如果您选择“事物”,我想查看向量内的所有变量(电话、冰箱、计算机...)。
有办法吗?现在,使用我的代码,该应用程序会显示每个向量的名称及其选项,并为您提供您选择的选项。
这就是我希望在应用中看到我的 selectInput 的方式。
但是,正如我所说,我想稍后使用每个向量的内容(在我的示例中,我编写了一个“renderText”)。如果选择“颜色”,您将看到“蓝色、红色、绿色、黄色...”。
这是我的代码:
colors = c("blue", "red", "green", "yellow", "white", "black")
numbers = c("1", "2", "3", "4")
things = c("phone", "fridge", "computer", "chair", "table", "notebook", "bag", "jacket")
list_options = list("colors" = colors, "numbers" = numbers, "things" = things)
if (interactive())
shinyApp(
ui = fluidPage(
selectInput("option", "Options:", list_options),
textOutput("text")
),
server = function(input, output)
output$text <- renderPrint(
input$option
)
)
非常感谢,
【问题讨论】:
【参考方案1】:我不确定是否理解。是你想要的吗:
shinyApp(
ui = fluidPage(
selectInput("option", "Options:", names(list_options)),
textOutput("text")
),
server = function(input, output)
output$text <- renderPrint(
list_options[[input$option]]
)
)
【讨论】:
【参考方案2】:比 Stephane 的回答更复杂:使用 Observe() 和 updateSelectInput()
library(shiny)
values1 <- paste(c(1, 2, 3))
values_list <- list('1' = c(4, 5, 6), '2' = 7:9, '3' = 10:12)
ui <- fluidPage(
# Application title
titlePanel("Testing a dynamic dropdown"),
# Sidebar with a slider input for number of bins
sidebarLayout(
sidebarPanel(
selectInput("value",
"Choose value",
values1,
selected = '1', multiple = F),
selectInput("listed_values",
"Choose subvalue",
values_list['1'], # your default starting values
multiple = F)
),
mainPanel(
textOutput("text_result")
)
)
)
server <- function(input, output, session)
observe( # update 2nd dropdown based on first
updateSelectInput(session,
'listed_values',
choices = values_list[input$value],
selected = values_list[input$value][1])
)
output$text_result <- renderPrint( # print selection
print(paste('You chose', input$listed_values))
)
shinyApp(ui = ui, server = server)
【讨论】:
我需要像斯蒂芬妮的答案这样更简单的东西,但你的答案绝对是非常完整的!很高兴知道我能够做到这一点!非常感谢。以上是关于如何仅使用列表名称创建 selectInput? (不显示列表内容)闪亮的主要内容,如果未能解决你的问题,请参考以下文章
如何从 R 中的 selectInput 函数中一次选择所有输入
依赖于另一个 selectInput 的 selectInput
在 Rmarkdown 中使用 Shiny 创建响应式 selectInput - flexdashboard
从 SelectInput (R Shiny) 中的分组选项列表中获取组标签