使用2个列表为selectInput创建选择列表

时间:2018-07-11 19:39:17

标签: r vector shiny

我有一个手动创建的selectInput菜单:

  selectInput(inputId = "group_by",
              label = "Grouping Options:",
              choices = c("Product" = "PRODUCT_NAME", 
                          "Capacity" = "PRODUCT_CAPACITY", 
                          "Month" = "CALENDAR_MONTH", 
                          "Line of Business" = "LOB")
  )

我想简化此操作,因此不必每次更改选项时都进行编辑。

我已经有2个列表,对于该应用程序,我希望只能编辑这些列表,并让应用程序的其余部分根据这些列表生成所需的内容。

两个列表是:

column_names <- c('PRODUCT_NAME', 'PRODUCT_CAPACITY', 
             'CALENDAR_MONTH', 'LOB')
aliases <- c('Product', 'Capacity', 'Date', 'Line of Business')

我想将此代码块更改为更具适应性的块,利用向量aliases和向量column_names来创建选择列表,而不是:

c("Product" = "PRODUCT_NAME", 
  "Capacity" = "PRODUCT_CAPACITY", 
  "Month" = "CALENDAR_MONTH", 
  "Line of Business" = "LOB")

我认为我可以使用lapply或sapply,但是我对它们的使用不是很坚强,我确实需要使用aliases = column_name,因此菜单显示“ nice”名称(aliases),而且知道在数据(column_names)中的哪里找到

欢迎提出任何建议。谢谢!

2 个答案:

答案 0 :(得分:2)

您可以使用column_namesaliases向量提供名称,

names(column_names) <- aliases

column_names
#        Product           Capacity               Date   Line of Business 
# "PRODUCT_NAME" "PRODUCT_CAPACITY"   "CALENDAR_MONTH"              "LOB" 

以上值类似于键值表示。您可以将其验证为:

v <- c("Product" = "PRODUCT_NAME", 
  "Capacity" = "PRODUCT_CAPACITY", 
  "Date" = "CALENDAR_MONTH", 
  "Line of Business" = "LOB")

v
#        Product           Capacity              Date   Line of Business 
# "PRODUCT_NAME" "PRODUCT_CAPACITY"   "CALENDAR_MONTH"              "LOB" 


identical(column_names,v)
#[1] TRUE

答案 1 :(得分:1)

如果顺序始终相同,则只需将别名放入selectInput

selectInput(inputId = "group_by",
             label = "Grouping Options:",
             choices = aliases)

然后,每次需要列名时,只需获取与选择相对应的索引

column_names[which(aliases == input$group_by)]