2017-07-21 5 views
1

Ich versuche eine Shiny-App zu erstellen, die alle Zeilen einer Tabelle anzeigt oder dem Benutzer die Auswahl einer Teilmenge von Zeilen ermöglicht. Irgendwann wird es mehrere Pulldown-Menüs geben, aber im Moment versuche ich nur, einen durchzuarbeiten.Glänzend: Erstellen eines dynamischen Pulldown-Menüs, das die Option "Alle Zeilen" enthält

Aus irgendeinem Grund wird der Status in der Anweisung filter() von der App nicht gefunden. Dies ist wahrscheinlich unabhängig von dem Problem, dass alle Zeilen angezeigt werden dürfen, wenn das Pulldown-Menü nichts auswählt.

Jede Hilfe oder Links zu Beispielen würde sehr geschätzt werden.

library(shiny) 

ui <- fluidPage(

    titlePanel("Products"), 

    sidebarLayout(
    sidebarPanel( 
     uiOutput("statusOutput"), 
     sliderInput("modelInput","Model Number", 0,200,c(100,200)) 
    ), 

    mainPanel(
     tableOutput("results") 
    ) 
) 
) 

server <- function(input, output) { 

    output$statusOutput <- renderUI({ 
    selectInput("statusInput","Status", 
       sort(unique(Product_List$Status))) 
    }) 

    filtered <- reactive ({ 
    if (is.null (input$statusInput)) { 
     return(NULL) 
    } 

    Product_List %>% 
     filter(Status == input$statusInput) 
    }) 

    output$results<-renderTable({ 
    filtered() 
     }) 
    } 

    shinyApp(ui = ui, server = server) 

Antwort

0

Ihr Code sieht in Ordnung für mich aus, der Filter funktioniert auch wie erwartet. Versuchen Sie Ihren Code mit

Product_List = data.frame(Status=c(1,2,3,4,5)) 

Der folgende Code ist ein Beispiel für das gewünschte Verhalten laufen Sie beschreiben, wo alle Zeilen ausgewählt werden, wenn der Benutzer keine Eingabe gibt, und die Datenrahmen wird anders gefiltert. Ich hoffe das hilft!

library(shiny) 
library(dplyr) 

Product_List = data.frame(Status=c(1,2,3,4,5)) 

ui <- fluidPage(

    titlePanel("Products"), 

    sidebarLayout(
    sidebarPanel( 
     uiOutput("statusOutput"), 
     sliderInput("modelInput","Model Number", 0,200,c(100,200)) 
    ), 

    mainPanel(
     tableOutput("results") 
    ) 
) 
) 

server <- function(input, output) { 

    output$statusOutput <- renderUI({ 
    selectizeInput("statusInput","Status", 
       sort(unique(Product_List$Status)),multiple=TRUE,options=list(placeholder="All")) 
    }) 

    filtered <- reactive ({ 
    if (length(input$statusInput)==0) { 
     return(Product_List) 
    } 

    Product_List %>% 
     filter(Status %in% input$statusInput) 
    }) 

    output$results<-renderTable({ 
    filtered() 
    }) 
} 

shinyApp(ui = ui, server = server) 
+0

Vielen Dank! Ich arbeite immer noch an dem reaktiven Teil, aber ich habe die besten Filter bekommen. Offensichtlich bin ich neu dazu. – Laura

Verwandte Themen