2013-04-03 13 views
5

Shiny Neuling hier.R Shiny: nicht sicher, warum ggplot versagt

Ich versuche, ein R glänzend Skript zu schreiben, und eines der Dinge, die ich tun möchte, ist ein Histogramm der Anzahl der Anzeigenansichten für einen bestimmten Tag und einen bestimmten Werbetreibenden über verschiedene Regionen.

Mein Tisch ist, hat die folgenden Spalten (mit Beispieldaten):

Date Impressions Advertiser Factor 1   DMA 

2/19  22789  McDonalds Cheap   Los Angeles 
2/17  15002 Regal Cinem Luxury   New York 
2/20  12345  McDonalds Cheap   D.C. 

Meine gewünschte Ausgabe auf dem UI-Register ist so etwas wie dies mit ggplot

ggplot(df2, aes(x=DMA, y=Impressions, fill=DMA)) +geom_histogram() 

und sollte wie folgt aussieht

enter image description here

Allerdings bekomme ich einen Fehler

Error: object 'DMA' not found 

Wenn ich im Grunde die gleiche Formel in R Shiny einfügen. Mein Code ist wie folgt

server.R

library(shiny) 
library(ggplot2) 

df<- na.omit(read.csv("data.csv", fill= TRUE, nrows= 3000000)) 

shinyServer(function(input, output){ 

df2<- reactive({df[df$Date==input$date & df$Advertiser==input$name, ]}) 

#FIXME why is this plot not printing 
output$plot1<- renderPlot({ 
    print(ggplot(df2, aes(x=DMA, y=Impressions, fill=DMA)) +geom_histogram()) 

}) 
#end of server brackets 
}) 

ui.R

library(shiny) 
df<- na.omit(read.csv("data.csv", fill= TRUE, nrows= 3000000)) 
daterange<- unique(df$Date) 
names <- unique(df$Advertiser) 

shinyUI(pageWithSidebar(

    #Title of Application 
    headerPanel("Advertisement"), 

    sidebarPanel( 

    selectInput("date", "Date:", 
       choices= daterange), 

    selectInput("name", "Partner", 
       choices= names) 

), 

    mainPanel(
    tabsetPanel(
     tabPanel("Plot1", plotOutput("plot1")) 

    ) 
    ) 

    #end of UI brackets 
)) 

Alles andere Arbeiten, einschließlich der Registerkarten. Aber diese Handlung wird nicht angezeigt.

AKTUALISIERUNG: DANKE, GGplot funktioniert jetzt, indem es die Anweisung print() umschließt. Es tritt jedoch ein neues Problem auf, wenn eine Variable nicht gefunden werden kann.

+5

Willst du sagen, dass die Handlung normal funktioniert, aber nicht in Shiny? Versuchen Sie, Ihre Zeichnung in 'print()' zu schreiben, z. 'p <- ggplot (...) + geom_histogram (...); drucken (p) '. – MadScone

+0

danke. ggplot funktioniert jetzt, aber es zeichnet nicht wegen "Objekt DMA nicht gefunden" –

+1

Ist 'DMA' definitiv eine Spalte in' df2'? – MadScone

Antwort

8

df2 keine Daten, sondern eine reaktive Funktion. Verwenden Sie df2() in ggplot, und vergessen Sie nicht, wie oben beschrieben zu drucken.

Wenn so etwas passiert, nicht davon ausgehen, dass "DMA ist da", sondern eine print(str(df2)) an dem kritischen Punkt einfügen.

+0

danke, das hat es gelöst. es ist immer noch nicht intuitiv für mich, dass df jetzt eine reaktive funktion darstellen, wird eine weile zu gewöhnen –

5

Versuchen das ggplot Objekt mit Druck Einwickeln()

+0

danke, aber bitte auch auf mein neues Problem schauen –

+0

print() war mein fehlendes Stück im Puzzle! – Raffael