Ich folge this tutorial zu lernen, Shiny Apps zu bauen. In der endgültigen Version enthält die renderUI()
für "Land" nur alle Länder im Datensatz. Gibt es eine Möglichkeit, diese Liste basierend auf dem mit dem Schieberegler ausgewählten Preisbereich reaktiv/gefiltert zu machen? HierCreating reactive renderUI
ist der entsprechende Code:
output$countryOutput <- renderUI({
selectInput("countryInput", "Country",
sort(unique(bcl$Country)),
selected="CANADA")
})
Und hier ist das ganze. sehr einfache App:
library(shiny)
library(ggplot2)
library(dplyr)
bcl <- read.csv("bcl-data.csv", stringsAsFactors = FALSE)
ui <- fluidPage(
titlePanel("BC Liquor Prices", windowTitle = "Mmmmm yeh"),
sidebarLayout(
sidebarPanel(
sliderInput("priceInput", "Price",
min = 0, max = 100,
value = c(25, 40), pre = "$"
),
radioButtons("typeInput", "Product type",
choices = c("BEER", "REFRESHMENT", "SPIRITS", "WINE"),
selected = "WINE"
),
uiOutput("countryOutput")
),
mainPanel(plotOutput("coolplot"),
br(),
br(),
tableOutput("results")
)
)
)
server <- function(input, output, session) {
filtered <- reactive({
if (is.null(input$countryInput)) {return(NULL)}
bcl %>%
filter(
Price >= input$priceInput[1],
Price <= input$priceInput[2],
Type == input$typeInput,
Country == input$countryInput
)
})
output$countryOutput <- renderUI({
selectInput("countryInput", "Country",
sort(unique(bcl$Country)),
selected="CANADA")
})
output$coolplot <- renderPlot({
if (is.null(filtered())) {return()}
ggplot(filtered(), aes(Alcohol_Content)) + geom_histogram()
})
output$results <- renderTable({
filtered()
})
}
shinyApp(ui = ui, server = server)
Eigentlich ist es Ihr Kommentar über das funktioniert, nicht das. Es scheint, dass ich einen anderen Filter erstellen muss, da 'filtered()' bereits "Country" enthält. Betrachte ich das richtig? –
Ihr reactive verwendet 'input $ countryInput', aber ich kann es nirgendwo im Code finden. – Gopala
Mit anderen Worten, die Reparatur, die reaktiv ist und den obigen Code verwendet, sollte funktionieren. Wenn nicht, lass es mich wissen. Wenn es eine Möglichkeit gibt, die Daten zu posten, kann ich sie testen und validieren. – Gopala