2016-05-08 14 views
0

Ich habe ziemlich viele Fragen über StackOverflow über Probleme mit aes Kartierung in Shiny gesehen, und die meisten davon sind mit aes_string() in Menschen Code gelöst. Diese haben jedoch fast ausschließlich mit x/y-Werten zu tun.Probleme mit Shiny PCA und ggbiplot Färbung

Mein Problem tritt auf, wenn Sie ggbiplot für PCA verwenden, und bezieht sich auf das Zuordnen von Farbvariablen. Meine App lässt den Client ihre eigene Datei hochladen, aber ich habe dies mit mtcars durchgeführt, nur um sicherzustellen, dass es ein reproduzierbarer Fehler war (ist es). Hier ist der Upload-Code:

ui.R

library(shiny) 
shinyUI(pageWithSidebar(
    headerPanel("Where the Flip are my colors?"), 
    sidebarPanel(
    fileInput('file1', 'Choose CSV File', 
       accept=c('text/csv', 
         'text/comma-separated-values,text/plain', 
         '.csv')), 
    tags$hr(), 
    checkboxInput('header', 'Header', TRUE), 
    radioButtons('sep', 'Separator',c(Comma=',',Semicolon=';',Tab='\t'),','), 
    selectInput("variable",label = h5("Coloring Variable"),"") 
), 
    mainPanel(
    tableOutput("inputfile"), 
    plotOutput("PCA") 
) 
)) 

server.R

library(shiny) 
shinyServer(function(input, output, session) { 
upData <- reactive({if(is.null(input$file1))return(NULL) 
    inFile <- input$file1 
    dat <- read.csv(inFile$datapath) 
    return(dat) 
}) 
output$inputfile <- renderTable({ 
    upData() 
}) 
observe({ 
    updateSelectInput(
    session, 
    "variable", 
    choices=names(upData())) 
}) 
    output$PCA <- renderPlot({ 
    upData.pca <- prcomp(upData(), scale = TRUE) 
    ggbiplot(upData.pca, obs.scale = 1, var.scale = 1) 
# + geom_point(aes_string(color=input$variable)) 
    }) 
}) 

Wenn ich diesen Code ausführen, wie sie ist, ist es die hochgeladene Datenrahmen und PCA Biplot bietet Ich will. Aber wenn ich die geom_point Zeile auskommentiere, erhalte ich einen "ungültigen Argument zum unären Bediener" Fehler. Ich habe das mit Shiny gemacht und der Code läuft gut mit mtcars. Wenn ich meinen tatsächlichen Code ausführe, bekomme ich einen "Objekt" -Eingang "nicht gefunden" -Fehler, also sind mein Spielzeug-Beispiel und mein tatsächliches Problem nicht ganz gleich, aber ich hoffe, dass das Problem damit zusammenhängt.

Ich habe in der Dokumentation auf aes in Shiny geschaut und Google für eine ähnliche Frage durchforstet, aber war nicht in der Lage, eine Lösung zu finden. Ich würde LIEBE einige Hilfe mit diesem.


Mit Gopala des Codes, die Fehler ich sehe sind:

Warning: Error in [[: subscript out of bounds Stack trace (innermost first): 84: FUN 83: lapply 82: aes_string 81: layer 80: geom_point 79: renderPlot [#17] 71: output$PCA 4: <Anonymous> 3: do.call 2: print.shiny.appobj 1: <Promise> Don't know how to automatically pick scale for object of type tbl_df/tbl/data.frame. Defaulting to continuous. Warning: Error in : Aesthetics must be either length 1 or the same as the data (32): colour, x, y Stack trace (innermost first): 71: output$PCA 4: <Anonymous> 3: do.call 2: print.shiny.appobj 1: <Promise> Warning: Error in eval: object 'drat' not found Stack trace (innermost first): 71: output$PCA 4: <Anonymous> 3: do.call 2: print.shiny.appobj 1: <Promise>

+0

Wenn ich 'mtcars' anstelle von NULL von diesem reaktiven zurückgeben, so kann ich testen, ohne Dateien und so hochzuladen, es funktioniert gut für mich. '' packageVersion ('shiny') 'ist in meinem Fall' [1] '0.12.2'' – Gopala

+0

Das ist seltsam - ich habe genau das Gleiche gemacht und den Fehler "ungültiges Argument für unären Operator" erneut angezeigt. Meine Version ist 0.13.2, also bin ich jetzt in allen Farben verwirrt. Sie können die Punkte basierend auf der Eingabevariablen reaktiv gestalten? – Scott

+0

Ja, die Wahl von mpg oder cyl ändert die Färbung und die Legende. Ich bekomme ein paar Parse-Fehler mit Subskript außerhalb der Grenzen, aber das hat nichts in der App funktioniert verhindert. Habe diesen Fehler noch nicht beseitigt. – Gopala

Antwort

0

Nun, ich schließlich Ich habs.

geom_point(aes_string(color=upData()[,input$variable])) 

Aus welchem ​​Grunde auch jenseits meinem begrenzten Verständnis von R, hatte ich upData() den anfänglichen Blindwert zu definieren.

Hoffe, dass jemand anderen hilft, ein paar Tage der Agonie zu vermeiden.

0

Hier ist der Code ich verwende und es funktioniert:

library(shiny) 
library(ggbiplot) 

ui <- pageWithSidebar(
    headerPanel("Where the Flip are my colors?"), 
    sidebarPanel(
    fileInput('file1', 'Choose CSV File', 
       accept=c('text/csv', 
         'text/comma-separated-values,text/plain', 
         '.csv')), 
    tags$hr(), 
    checkboxInput('header', 'Header', TRUE), 
    radioButtons('sep', 'Separator',c(Comma=',',Semicolon=';',Tab='\t'),','), 
    selectInput("variable",label = h5("Coloring Variable"),"") 
), 
    mainPanel(
    tableOutput("inputfile"), 
    plotOutput("PCA") 
) 
) 

server <- function(input, output, session) { 
    upData <- reactive({if(is.null(input$file1)) return(mtcars) 
    inFile <- input$file1 
    dat <- read.csv(inFile$datapath) 
    return(dat) 
    }) 
    output$inputfile <- renderTable({ 
    upData() 
    }) 
    observe({ 
    updateSelectInput(session, 
     "variable", 
     choices=names(upData())) 
    }) 
    output$PCA <- renderPlot({ 
    upData.pca <- prcomp(upData(), scale = TRUE) 
    ggbiplot(upData.pca, obs.scale = 1, var.scale = 1) + 
     geom_point(aes_string(color=input$variable)) 
    }) 
} 

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

Ich habe gerade Ihren Code ausgeführt, und es ist eine leichte Verbesserung - ich bekomme jetzt den Fehler "Objekt nicht gefunden" (wo die Eingabevariable, wie Zyl etc., aufgeführt sind). Aber es gibt kein Biplot und keine Farbänderungen. Ich kann nicht sehen, wie dies ein Systemfehler sein würde, da ich R neu gestartet und alle Abhängigkeiten geprüft habe. – Scott

+0

Vielleicht ändern Sie die 'selectInput' in' renderUI' und generieren Sie sie auf der Serverseite anstatt durch beobachten/aktualisieren und sehen Sie, ob dort ein Problem/Bug in Ihrer Version ist. – Gopala

+0

Schaltserverseitige 'Ausgang $ variable <- renderUI ({ selectInput ("Variable", "Variable", Auswahl = Namen (updata()) })' und ui-Seite 'uiOutput (" Variable ")" liefert das exakt gleiche Problem wie zuvor. Ich bin absolut verblüfft. – Scott