如何在 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 中的两个输入标签重叠?

如何使用 DT、R 和 Shiny 在表格的单元格中嵌入图像

R Shiny:如何构建动态 UI(文本输入)

在R Shiny中如何分离滑块输入值并使用它们进行过滤

如何在 Shiny 中引用 ui.R 中的反应元素

R Shiny:如何更改表格的背景颜色