Реализация пар ключ-значение в Shiny selectInput - PullRequest
0 голосов
/ 08 июля 2019

У меня есть данные пары ключ-значение, которые я хочу использовать в выпадающем списке Shiny selectInput.

Я хочу, чтобы пользователь выбирал из списка имен игроков, но затем я хочу использовать соответствующий playerID для фильтрации других наборов данных.

Есть ли способ сделать это?Мой текущий код выглядит так:

selectInput("player","Select a player", Players$fullName),

Я хочу, чтобы выпадающий список игроков был реактивным в зависимости от выпадающего списка команд.Мой полный код:

library(shiny)
library(dplyr)

setwd("C:/Users/Michael/Documents/Baseball/Retrosheet/Shiny")
Teams <- read.csv("TeamID.csv")  # List of team names
Players <- read.csv("TeamBatter.csv") # TeamName, fullName, retroID
PlayerData <- read.csv("playerExpectedRBI.csv")  # Data keyed on PlayerID


todrop <- Players$retroID
names(todrop) <- Players$fullName

ui <- fluidPage(

  selectInput("team","Select a team:",Teams$teamID),
  selectInput("player", "Select a player", todrop),
  tableOutput("playerSummary")
)

server <- function(input,output,session){

 observe({
      PlayerList <- reactive({Players %>% filter(teamID == input$team) %>%  select(fullName,retroID)})
      updateSelectInput(session,"player", choices=PlayerList()$fullName)
      SelectedPlayerSum <- reactive({PlayerData %>% filter(resbatter == input$player)}) 
      output$playerSummary <- renderTable({SelectedPlayerSum()})
      })

    }

    shinyApp(ui = ui, server = server)

Я получаю сообщение об ошибке: Ошибка в (функция (выбор, имя): все подсписки в «вариантах» должны быть названы.

1 Ответ

0 голосов
/ 08 июля 2019

Вам нужно создать именованный список и передать его в раскрывающийся список. Он вернет playerID вместо игрока fullname.

library(shiny)

Players <- data.frame(fullname = c('John Doe', 'James Smith', 'John Smith'), playerID = c(1:3))
# create named list and pass it to dropdown
todrop <- Players$playerID
names(todrop) <- Players$fullname

ui <- fluidPage(
    selectInput("player","Select a player", todrop),
    uiOutput("out")
)

server <- function(input, output) {

    output$out <- renderUI({
        print(paste0("Players ID is: ", input$player)) # here you select player ID from dropdown (not fullnames) and can use input$player for your queries
    })
}

shinyApp(ui = ui, server = server)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...