RStudio / Shiny: подмножество файла CSV
Я хочу сделать список для selectInput
из файла CSV, но из подмножества, созданного на основе двух предыдущих selectInput
s. Это означает, что в моем приложении:
1) пользователь выбирает название вида из списка
radioButtons("species", "Which species are you workingwith?",
list("Caretta caretta"="Cc",
"Chelonia mydas"="Cm",
"Dermochelys coriacea"="Dc",
"Eretmochelys imbricata"="Ei",
"Lepidochelys kempii"="Lk",
"Lepidochelys olivacea"="Lo",
"Natator depressus"="Nd"))
2) пользователь выбирает область гнездования (страну) из списка на основе вида:
conditionalPanel(
condition="input.country_type=='List' & input.species=='Cc'",
selectInput("country", "Country:",
choices=subset(NestingArea2, Sp=='Cc')$Country)),
conditionalPanel(
condition="input.country_type=='List' & input.species=='Cm'",
selectInput("country", "Country:",
choices=subset(NestingArea2, Sp=='Cm')$Country)),
......
3) и затем пользователь должен выбрать RMU из списка, который отличается для каждого "вида" и "страны". Я попробовал это, и это не сработало:
selectInput("rmu", "RMU:",
choices=subset(
NestingArea2, Sp=='input.species', Country=='input.country')$RMU)
Файл.csv (NestingArea2) имеет 3 столбца: Sp | Страна | ГМР
Я мог бы сделать то, что я сделал с (2), но так как есть много стран, я ищу что-то более простое.
1 ответ
Создание условной панели и selectInput для каждой страны |RMU в отдельности будет очень утомительным и (кодирующим) ошибочным. То, что вы ищете, это динамический пользовательский интерфейс, где выбор в selectInput зависит от предыдущих вариантов.
Я не проверял это, потому что у меня нет ваших данных, но следующее должно помочь вам в этом. Поместите два выхода ниже в server.R. Затем поместите uiOutputs в ui.R (примечание: добавьте запятую при необходимости). Однако, прежде чем делать это, обязательно прочитайте документацию Shiny, посвященную динамическому интерфейсу, указанному выше.
Положите в server.R
output$countrySelect <- renderUI({
countryChoices <- subset(NestingArea2, Sp==input$species)$Country)
selectInput("country", "Country:", choices=countryChoices)
})
output$rmuSelect <- renderUI({
rmuChoices <- subset(NestingArea2, Sp==input$species, Country==input$country)$RMU
selectInput("rmu", "RMU:", choices=rmuChoices)
})
Положить в ui.R
uiOutput('countrySelect'),
uiOutput('rmuSelect')