【发布时间】:2019-10-19 07:33:48
【问题描述】:
我有一个带有两个 UI 选择器的 R Shiny 应用程序,每个选择器都有一个很大的项目列表。我知道如何为一个元素制作服务器端元素。但是如何制作两个相关的服务器端'selectInput'元素。因此,当一个元素发生变化时,另一个元素应该得到适当的反映。
示例。
第一个列表有 97,310 个元素。
第二个列表应该有:
2.1。对于第一个元素“Aaban” - 2 个相关值 (10, 11)
2.2。对于第二个元素“Aabha” - 1 个相关值 (12)
2.3。对于第三个元素“Aabid” - 3 个相关值(13、14、15)
这里是 R 代码。
library(shiny)
library(dplyr)
library(babynames)
# 1. Data sets
# 1.1. First data set (list)
list_names <- babynames::babynames %>%
distinct(name) %>%
pull(name) %>%
sort()
# 1.2. Second data set (data frame) for 3 first 'names' elements
df_ages <- data.frame(
name = c("Aaban", "Aaban", "Aabha", "Aabid", "Aabid", "Aabid"),
age = c(10, 11, 12, 13, 14, 15))
# 2. UI
ui <- fluidPage(
fluidRow(selectInput("si_name", "Name", multiple = FALSE, choices = character(0))),
fluidRow(selectInput("si_age", "Age", multiple = FALSE, choices = character(0))))
# 3. Server
server <- function(input, output, session) {
updateSelectizeInput(session, "si_name", choices = list_names, server = TRUE)
updateSelectizeInput(session, "si_age", choices = df_ages$age, server = TRUE)
}
# 4. App
shinyApp(ui, server)
谢谢!
【问题讨论】:
-
“相关值”是什么意思?
-
“相关”值是指以下内容——当用户在“姓名”中选择“Aaban”时——第二个 UI 元素“年龄”应该只有 2 个可能的值“10、11”。现在它具有所有“年龄”值。
-
好的。
list_names是什么?是df_ages中的名字吗? -
是的。 “list_names”具有唯一的名称。 “df_ages”数据框的每个名称都有“ages”。所以,一个名字可以有多个年龄。在第二个选择器中仅显示“相关”年龄的问题 - 不是全部。
标签: r shiny selectize.js selectinput