Вы имеете в виду что-то вроде этого (вы можете скачать и запустить пример)?
library(shiny)
ui <- shinyUI(
fluidPage(
titlePanel("Sample Shiny App"),
sidebarLayout(
sidebarPanel(
uiOutput("stateInput")
),
mainPanel(
plotOutput("statePlot")
)
)
))
server <- shinyServer(function(input, output) {
state <- sample(state.abb, 3, replace = FALSE)
total <- sample(1000:5000, 15)
claimNumber <- 1:15
data <- data.frame(state, total, claimNumber)
output$stateInput <- renderUI({
selectInput(
inputId = "state",
label = "Select a State:",
choices = levels(data$state)
)
})
output$statePlot <- renderPlot({
hist(data$total[data$state == input$state])
})
})
shinyApp(ui = ui, server = server)
То, что мы делаем, принимая список уникальных состояний, доступных в нашем кадре данных и передачи их к подходящему selectInput
, что делает в раскрывающемся списке в пользовательском интерфейсе. Отсюда мы можем получить доступ к любому значению, которое пользователь выбрал через объект input$state
. В более общем плане мы можем получить доступ к входам на основе того, что мы определяем как inputId
(в данном конкретном случае мы называем это state
).
После взятия пользовательского ввода мы можем подмножить фрейм данных только для того, чтобы возвращать значения, которые соответствуют определенному пользователем состоянию, и в этом случае передавать эти значения итогов в график, который мы выводим как результат.