如何在 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 中的代码(此答案更快)。
我正在构建一个闪亮的应用程序,其中有一个 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 中的代码(此答案更快)。