2016-08-09 44 views
0

In meiner Anwendung, frage ich den Benutzer, eine Datei (.csv) einzugeben. Weiterhin gibt es zwei selectInput (s), die mit renderUI() mit Spaltennamen aus der Eingabedatei gefüllt werden. Wenn der Benutzer zwei verschiedene Spalten auswählt und auf submitButton klickt, wird ein Plot generiert. Die Benutzeroberfläche mit idealer Ausgabe ist unten angegeben. Das funktioniert, weil ich die Werte manuell in das Diagramm eingegeben habe und nicht die Spalten, die in den Dropdown-Optionen ausgewählt wurden.R glänzend Rendern UI funktioniert nicht

korrekte Ausgabe

enter image description here

Ich denke, das Problem Faktor Typ Elemente in Datenrahmen zu numerischen Typ konvertiert, die aufgetragen werden kann.

das Fehlerbild:

enter image description here

server.R

library(shiny) 
shinyServer(function(input, output) { 

lastgang <- reactive({ 
    if(is.null(input$file)){return()} 
    read.table(file=input$file$datapath, header =TRUE, sep=",") 
}) 

output$X = renderUI({ 
    selectInput("X", "Select field to plot along X axis", names(lastgang()), selected = NULL) 
}) 

output$Y = renderUI({ 
    selectInput("Y", "Select field to plot along Y axis", names(lastgang()), selected = NULL) 
}) 

output$plot <- renderPlot({ 
    if (is.null(input$X) || is.null(input$Y)){return()} 
    x = input$X 
    y = input$Y 
    plot(as.numeric(lastgang()$x),as.numeric(lastgang()$y))  
    }) 
}) 

ui.R

library(shiny) 

shinyUI(fluidPage(

titlePanel("Source Design"), 
sidebarLayout(
    sidebarPanel(fileInput("file", label = h4("Select *.csv file")), 

      uiOutput("X"), 
      uiOutput("Y"), 
      submitButton("Plot") 
), 

mainPanel(
    plotOutput('plot') ) 
) 
)) 
+0

Schwer zu sagen, während kein Kleber mit, wie Sie Ihre Daten aussieht. Ich stimme zu, dass die Umwandlung "as.numeric" wahrscheinlich einen Vektor erzeugt, der nur aus "NA" -Einträgen besteht. Welche Art von Daten haben Sie? Edit: Ich sah, wie du 'x <- input $ X' aufruftst und danach 'lastgang() $ x' nennst. Das sollte nur "x" sein, oder nicht? Ansonsten macht die Zuordnung 'x <- Eingabe $ X 'keinen Sinn, denke ich. Leider habe ich keine Erfahrung mit 'shiny' ... – FlorianSchunke

+0

' x = Eingabe $ X' gibt einen Spalten-/Elementnamen zurück. Um die Reihe von Werten unter dieser Spalte zu erhalten, rufe ich lastgang() $ x auf, wobei lastgang() grundsätzlich ein R-Datenrahmen ist, der aus der .csv-Datei konvertiert wurde. Weiter habe ich überprüft, dass beide Spalten vom Typ 'num' sind. – Jio

Antwort

1

Wenn x und y sind Zeichenfolgen und lastgang ist ein Datenframe. Dann hat Ihr Fehler nichts mit der Verwendung von shiny zu tun. Die folgende funktionieren nicht in R

> D <- data.frame(Col1=1:5, Col2=11:15) 
> a <- 'Col1' 
> b <- D$a 
> b 
NULL 

Dies liegt daran, nach $ R einen Spaltennamen des Datenrahmens erwartet. Wenn die Variable vor $ ein Datenrahmen ist, dann haben Sie NULL, wenn der Spaltenname nicht existiert. Sie wollen, dass die Spalte Col1 genannt

> D <- data.frame(Col1=1:5, Col2=11:15) 
> a <- 'Col1' 
> b <- D[, which(names(D) == a)] 
> b 
[1] 1 2 3 4 5 
+0

In der Tat! Du hast recht. Ich habe die Basis vergessen, die "schärferen" Sachen zu machen. Passiert, vielen Dank. Das funktioniert: 'plot (lastgang() [, Eingabe $ X], lastgang() [, Eingabe $ Y])' – Jio