RStudio / Shiny: подмножество файла CSV

Я хочу сделать список для selectInput из файла CSV, но из подмножества, созданного на основе двух предыдущих selectInputs. Это означает, что в моем приложении:

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')
Другие вопросы по тегам