如何仅使用列表名称创建 selectInput? (不显示列表内容)闪亮

How can I create a selectInput only with the names of a list? (without showing the content of the list) Shiny

我有 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)

我的主要 objective 是创建一个闪亮的应用程序,它有一个仅包含列表名称(“颜色”、“数字”、“事物”)的 SelectInput。但是,如果您单击其中一个选项,您将能够获得列表的值以便稍后使用它们。

例如,如果您select“事物”,我想查看向量中的所有变量(phone、冰箱、计算机...)。

有办法吗?现在,使用我的代码,该应用程序会显示每个向量的名称及其选项,并为您提供 selected.

的选项

这就是我希望在应用程序中查看 select输入的方式。

但是,正如我所说,我想稍后使用每个向量的内容(为此,在我的示例中我编写了一个“renderText”)。如果您 select “颜色”,您将看到“蓝色、红色、绿色、黄色...”。

这是我的代码:

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
      })
    }
  )
}

非常感谢,

我不太清楚。是不是你想要的:

  shinyApp(
    ui = fluidPage(
      selectInput("option", "Options:", names(list_options)),
      textOutput("text")
    ),
    server = function(input, output) {
      output$text <- renderPrint({
        list_options[[input$option]]
      })
    }
  )

比 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)