如何在 R Shiny select-Input 中获取特定值而不是选择的打印名称
Posted
技术标签:
【中文标题】如何在 R Shiny select-Input 中获取特定值而不是选择的打印名称【英文标题】:How to get a specific value instead of the printed name, of choices, in R Shiny select-Input 【发布时间】:2021-09-13 15:24:18 【问题描述】:我正在构建一个闪亮的应用程序,其中有一个 selectizeInput。 可供选择的选项是国家名称,与它们的三位代码一起存储在 data.frame 中。
国家
name | code |
---|---|
Aruba | ABW |
Afghanistan | AFG |
... | ... |
在我闪亮的应用程序中,我在 UI 部分调用 selectizeInput,如下所示:
selectizeInput(inputId = 'inSelect',
label = "countries",
choices = country$name,
multiple = TRUE,
options = list(maxItems = 4,
placeholder = 'select up to 4 countries'))
选择国家时,我在Inselect变量中获取其中的名称列表。
例如当我选择 Afghanistan 时,inSelect 的值为 Afghanistan。
是否有可能获得不同的值作为输出。 所以不是名称,而是代码,存储在它旁边的表格中?
例如当我选择 Afghanistan 时,InSelect 获得值 AFG。
我知道,我可以将选项名称与它们的值一起写下来。但是 Country 是一个大约 200 行的表格。
【问题讨论】:
【参考方案1】:这是一个快速应用,可以满足您的需求,简而言之,您可以将国家/地区定义为矢量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
这样两者之间的关联被定义为应用加载时的单个向量,您无需一遍又一遍地查找表中的代码(这个答案更快)。
【讨论】:
【参考方案2】:可以在服务端使用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'))
【讨论】:
感谢您的快速答复。我已经想过了,但是我想到了,重新搜索和匹配值可能是一笔不小的开支。所以我想了一个“内部”selectizeInput 的解决方案。也再次感谢。我只是开始使用 R,所以我真的不知道如何实现它。 @Moritz 很高兴为您提供帮助!通过单击左侧的复选标记,随意接受最适合您的答案之一。每个帖子只能接受一个答案。参考 - ***.com/help/someone-answers以上是关于如何在 R Shiny select-Input 中获取特定值而不是选择的打印名称的主要内容,如果未能解决你的问题,请参考以下文章
如何防止 splitLayout、Shiny、R 中的两个输入标签重叠?