首页 > 解决方案 > 如何在 R Shiny select-Input 中获取特定值而不是选择的打印名称

问题描述

我正在构建一个闪亮的应用程序,其中有一个selectizeInput。要选择的选项是国家/地区名称,存储在 data.frame 及其三位数代码中。

国家

姓名 代码
阿鲁巴岛 ABW
阿富汗 AFG
... ...

在我闪亮的应用程序中,我在 UI 部分调用selectizeInput ,如下所示:

selectizeInput(inputId = 'inSelect',
               label = "countries",
               choices = country$name,
               multiple = TRUE,
               options = list(maxItems = 4, 
               placeholder = 'select up to 4 countries'))

选择国家时,我会在 inSelect 变量中获得它们的名称列表。

例如,当我选择阿富汗时,inSelect的值为阿富汗

是否有可能获得不同的值作为输出。所以不是名称,而是代码,存储在它旁边的表中?

例如,当我选择阿富汗时,InSelect获得 Value AFG

我知道,我可以将选项名称与它们的值一起写下来。但是Country是一个大约 200 行的表。

标签: rshinyselectinput

解决方案


这是一个快速应用程序,可以满足您的需求,简而言之,您可以将国家/地区定义为矢量的名称code

library(shiny)
country <- c("Aruba","Afghanistan")
code <- c("ABW","AFG")
choices <- code
names(choices) <- country

ui <- fluidPage(
    selectInput(inputId = 'inSelect',
                label = "countries",
                choices = choices
                multiple = TRUE),
    textOutput("selected")
    
)

server <- function(input, output) {
    output$selected <- renderText({
        input$inSelect
    })
}

shinyApp(ui = ui, server = server)

出于您的目的,供 data.framedf使用:

choices <- df$code
names(choices) <- df$country

这样,两者之间的关联就被定义为应用程序加载时的单个向量,您无需一遍又一遍地查找表中的代码(这个答案更快)。

在此处输入图像描述


推荐阅读