如何解决如何在 R Shiny select-Input 中获取特定值而不是打印名称、选项
我正在构建一个 Shiny 应用程序,其中有一个 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获得AFG值。
我知道,我可以将选择名称与它们的值一起写下来。但国家是一个大约 200 行的表格。
解决方法
这是一个快速应用程序,可以满足您的需求,简而言之,您可以将国家/地区定义为向量 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
这种方式将两者之间的关联定义为应用加载时的单个向量,您无需一遍又一遍地查找表中的代码(这个答案更快)。
,可以在服务器端使用match
获取对应的值。
这是一个快速且小巧的闪亮应用。
library(shiny)
ui <- fluidPage({
fluidRow(column(6,selectizeInput(inputId = 'inSelect',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'))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。