2016-10-14 6 views
0

Ich versuche, eine reaktive Benutzeroberfläche in glänzend zu produzieren.Reaktive Plots in glänzend mit mehreren Datensätzen

Ich habe einen Datensatz bestehend aus Supermarktprodukten Tagesumsatz über einen Zeitraum von 2 Jahren. Beispiel:

product     Total_Sales    Date(YYYY-MM-DD) 

1. 'Coke 0.5 L'    23      2014-01-02 
2. 'Sprite 0.5 L'   18      2014-01-02 
3. 'CornFlakes 1.kg'   21      2014-01-02 
4. 'Coke 0.5 L'    25      2014-01-03 
5. 'BurgersX6 1.kg'   8      2014-01-03 
6. 'CornFlakes 1.kg'   17      2014-01-03 

Ich möchte, dass mein Benutzer ein Produkt als Eingabe auswählt und bei der Eingabe die entsprechende time_series plottet.

selectInput("product", "Choose a product:", 
       choices = as.factor(levels(df$product))) 

Und das funktioniert gut.

In Server:

datasetInput <- df 
output$tsplot <- reactive({renderPlot(
    {dataset <- datasetInput[product==input$product,] 
    plot(as.ts(dataset$Total_Sales,dataset$Date),start=input$start,end=input$end") 
    } 
) 
    }) 

Leider bekomme ich keine Handlung aus. Wenn ich stattdessen eine reaktive Eingabe datasetInput < - df [Produkt == Eingabe $ Produkt,] und die Ausgabe $ tsplot entsprechend ändern, bekomme ich als Ausgabe die erste verfügbare Eingabe, aber wenn ich die Eingabe $ Produkt ändern bleibt die Handlung der gleich. Ich bin ziemlich neu in glänzend, jede Hilfe sehr willkommen ist, danke

Antwort

0

Versuchen Sie Ihre Eingabe Datenrahmen in einem reactive Ausdruck zu filtern und dann das Ergebnis in renderPlot nennen:

datasetInput <- reactive({ 
    df[df$product == input$product, ] 
}) 

output$tsplot <- renderPlot({ 
    dataset <- datasetInput() 
    plot(as.ts(dataset$Total_Sales, dataset$Date, start = input$start, end = input$end)) 
}) 

EDIT:

mit Ihren Daten:

df <- read.table(
    text = " Name     Total_Sales    Date 
    1. 'Coke 0.5 L'    23      2014-01-02 
    2. 'Sprite 0.5 L'   18      2014-01-02 
    3. 'CornFlakes 1.kg'   21      2014-01-02 
    4. 'Coke 0.5 L'    25      2014-01-03 
    5. 'BurgersX6 1.kg'   8      2014-01-03 
    6. 'CornFlakes 1.kg'   17      2014-01-03" 
) 
df$Date <- as.Date(as.character(df$Date, format = "%Y-%m-%d")) 


library("shiny") 
ui <- fluidPage(
    selectInput("product", "Choose a product:", 
       choices = levels(df$Name)), 
    plotOutput(outputId = "tsplot") 
) 
server <- function(input, output){ 
    datasetInput <- reactive({ 
    df[df$Name == input$product, ] 
    }) 

    output$tsplot <- renderPlot({ 
    dataset <- datasetInput() 
    plot(as.ts(dataset$Total_Sales, dataset$Date)) 
    }) 
} 
shinyApp(ui = ui, server = server) 
+0

Wie ich es nicht, insbesondere Arbeit schrieb, als ich die datasetInput Dimension Ausgang es gibt mir 0 Zeilen . –

+0

Bitte ein reproduzierbares Beispiel schreiben. Wie gibst du das DatasetInput aus? In deinem Code ist das genauso wie bei df, also was ist df? dput (df)? – Victorp

+0

es ist einfach Dim (DatasetInput()) in der Ausgabe Caption, nicht Dim (Df). –

Verwandte Themen