如何在 R Shiny select-Input 中获取特定值而不是选项的打印名称

How to get a specific value instead of the printed name, of choices, in R Shiny select-Input

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

国家/地区

名字 代码
阿鲁巴 体重
阿富汗 AFG
... ...

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

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

当 selecting 国家时,我在 inSelect 变量中得到了它们的名称列表。

例如当我 select Afghanistan, inSelect 的值是 Afghanistan.

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

例如当我 select Afghanistan, InSelect 得到值 AFG.

我知道,我可以将选择的名称与它们的值一起写下来。但是 Country 是 ~200 行的 table。

可以在服务器端使用match获取对应的值。

这是一款快速小巧的闪亮应用。

library(shiny)

ui <- fluidPage({
  fluidRow(column(6, selectizeInput(inputId = 'inSelect',
                 label = "countries",
                 choices = country$name,
                 multiple = TRUE)), 
           column(6, verbatimTextOutput('text')))
  
})

server <- function(input, output) {
  output$text <- renderPrint({
    req(input$inSelect)
    country$code[match(input$inSelect,country$name)]
  })
}

shinyApp(ui, server)

数据

country <- data.frame(name = c('Aruba', 'Afghanistan'), code = c('ABW', 'AFG'))

这是一个可以满足您需求的快速应用程序,简而言之,您可以将国家/地区定义为向量的名称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.frame df 使用:

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

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