2014-05-23 4 views
9

Ich habe eine Frage zu Shiny. Ich werde mit dem Vorwort vortragen, dass ich Zeit mit Google- und SO-Archiven verbracht habe, ein paar Dinge ausprobiert habe, aber trotzdem etwas vermisse. Ich entschuldige mich für einen Posting-Faux-Pas und bedanke mich im Voraus für jede Anleitung.R Shiny - ui.R scheint einen vom Server gelesenen Datenrahmen nicht zu erkennen.

Ich versuche, was ich glaube, ist eine sehr grundlegende Aufgabe, um Shiny zu lernen und Code aus einem der Shiny Galerie Beispiele anzupassen. Ich lese eine CSV-Datei in einen Datenrahmen (df.shiny). Ich möchte Geschäftsleistungsdaten (ITBpct) auswählen, die sich auf eine Einrichtung beziehen (Ebenen von df.shiny$Facility) und sie in einem SPC-Diagramm anzeigen (mit qcc).

Mein Problem scheint damit verbunden zu sein, die Daten von server.R zu ui.R verfügbar zu machen. Ich glaube, dass die Daten in den Datenrahmen gelesen werden (es druckt in der Konsole), ist aber nicht verfügbar ui.R. Ich bin überzeugt, dass ich etwas übersehen habe, aber noch nicht herausgefunden habe.

Ich verwende die auf der Shiny-Site notierte Ordnerstruktur, mit server.R und ui.R in einem Arbeitsverzeichnis-Unterordner ("Shiny-App-1") und den Daten in einem Unterordner zu diesem Ordner (Shiny App-1/Daten).

Der Code, den ich eingefügt habe, um den Fehler zu verfolgen, läuft durch Drucken SRV-2 und UI-1 in der Konsole. Firefox öffnet sich. Dann der Fehler.

options(browser = "C:/Program Files (x86)/Mozilla Firefox/firefox.exe") 
library(shiny) 
runApp("Shiny-App-1") 

server.R-Code

library(shiny) 
library(qcc) 
print("SRV-1") # for debugging 

df.shiny = read.csv("data/ITBDATA.csv") 
print(df.shiny) # for debugging 
print("SRV-2") # for debugging 


shinyServer(function(input, output, session) { 
    # Combine the selected variables into a new data frame 
    # assign xrow <- Facility 

    print("SRV-3") # for debugging 
    selectedData <- reactive({ subset(df.shiny, Facility %in% input$xrow) }) 
    print("SRV-4") # for debugging 

    output$plot1 <- renderPlot({ qcc(selectedData$ITBpct, type = 'xbar.one') }) 
}) 

ui.R-Code

library(shiny) 
print("UI-1") # for debugging 

shinyUI(pageWithSidebar(
    headerPanel('SPC Chart by Facility'), 
    sidebarPanel(selectInput('xrow', 'Facility', levels(df.shiny$Facility))), 
    mainPanel(plotOutput('plot1')) 

)) 

Fehlermeldung

ERROR: object 'df.shiny' not found 

Ich kann die Daten verfügbar machen. (War mir nicht sicher, wie eine Probe dieser Bemerkung zu befestigen.)

SESSION INFO

> sessionInfo() 
R version 3.1.0 (2014-04-10) 
Platform: x86_64-w64-mingw32/x64 (64-bit) 

locale: 
[1] LC_COLLATE=English_United States.1252 LC_CTYPE=English_United States.1252 
[3] LC_MONETARY=English_United States.1252 LC_NUMERIC=C       
[5] LC_TIME=English_United States.1252  

attached base packages: 
[1] splines stats  graphics grDevices utils  datasets methods base  

other attached packages: 
[1] plyr_1.8.1  forecast_5.4  timeDate_3010.98 zoo_1.7-11  doBy_4.5-10  
[6] MASS_7.3-31  survival_2.37-7 gplots_2.13.0 car_2.0-20  ggplot2_0.9.3.1 
[11] lattice_0.20-29 qcc_2.3   shiny_0.9.1 

Antwort

11

Das Problem ist, dass Sie df.shiny$Facility in Ihrer ui.R-Datei verwenden und df.shiny wird dort nicht definiert. Die ui kann nicht alle Variablen in der server sehen, sie haben andere Möglichkeiten zu kommunizieren.

Damit dies funktioniert, müssen Sie selectInput auf dem Server erstellen und dann auf der Benutzeroberfläche rendern. In Ihrem Server hinzufügen

shinyServer(function(input, output, session) { 
    output$facilityControl <- renderUI({ 
     facilities <- levels(df.shiny$Facility) 
     selectInput('xrow', 'Facility', facilities) 
    }) 

    selectedData <- reactive({ subset(df.shiny, Facility %in% input$xrow) }) 
    output$plot1 <- renderPlot({ qcc(selectedData$ITBpct, type = 'xbar.one') }) 
}) 

und dann den ui ändern

shinyUI(pageWithSidebar(
    headerPanel('SPC Chart by Facility'), 
    sidebarPanel(uiOutput("facilityControl"), 
    mainPanel(plotOutput('plot1'))  
)) 
+0

Hallo ... vielen Dank! Das brachte mich zum nächsten Schritt. Ich habe jetzt andere Probleme, aber ich werde ein bisschen mehr lesen und vielleicht einen anderen Beitrag. Noch einmal Danke! – crlong

Verwandte Themen