2016-03-24 6 views
3

Ich möchte ein reaktives Dataset in meiner glänzenden App verwenden, sodass alle anderen Objekte, die dieses Dataset verwenden, gemäß den Werten in reactiveDf erneut gerendert werden können.Wie wird ein Datensatz in Shiny reaktiv gemacht?

In diesem Beispiel gebe ich nur eine Tabelle aus, aber in meiner App habe ich andere Diagramme und Tabellen, und die Idee ist, das Rendering nur durch Unterteilung reactiveDf auszulösen. Auch das würde ich gerne mit dplyr machen.

library(shiny) 
library(dplyr) 
ui <- shinyUI(fluidPage(
    sidebarLayout(
     sidebarPanel(
     checkboxGroupInput('Category', '', 
          unique(mtcars$carb), selected = unique(mtcars$carb))), 
     # Show table of the rendered dataset 
     mainPanel(
     tableOutput("df") 
    ) 
    ) 
)) 


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

    reactiveDf <- reactive({tbl_df(mtcars) %>% 
            filter(carb %in% input$Category)}) 

    output$df <- renderTable({reactiveDf}) 
}) 

shinyApp(ui = ui, server = server) 

Gerade jetzt, wenn ich diese App laufen bekomme ich:

Listening on http://127.0.0.1:7032 
Warning: Error in UseMethod: no applicable method for 'xtable' 
applied to an object of class "reactive" 

Und tableOutput() wird nicht angezeigt.

+0

@cory Wenn ich 'str (tbl_df (mtcars))' I 'Klassen 'tbl_df' bekommen, 'Tabl' und "Datenrahmen". Meinst du, dass das Objekt _exclusively_ ein Dataframe sein sollte? Ich benutze auch ggvis in meiner ursprünglichen App, und so habe ich versucht, mit dplyr für die Untergruppe zu bleiben. – Dambo

Antwort

4

A reaktiv ist eine Funktion ... so dass Sie Pars brauchen ...

library(shiny) 
library(dplyr) 
ui <- shinyUI(fluidPage(
    sidebarLayout(
    sidebarPanel(
     checkboxGroupInput('Category', '', 
         unique(mtcars$carb), selected = unique(mtcars$carb))), 
    # Show table of the rendered dataset 
    mainPanel(
     tableOutput("df") 
    ) 
) 
)) 


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

    reactiveDf <- reactive({return(tbl_df(mtcars) %>% 
     filter(carb %in% input$Category))}) 

    output$df <- renderTable({reactiveDf()}) 
}) 

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

Danke, mein brutales Kopieren/Einfügen von hier und da hat mir nicht klar gemacht, dass ich tatsächlich eine Funktion definiere und sie 'reactiveDf' zuordne. – Dambo

+1

Es ist definitiv nicht intuitiv, fühle mich nicht schlecht. – cory

Verwandte Themen