2017-04-05 4 views
1

Ich versuche gerade eine glänzende App, die die Zusammenfassung einer einfachen linearen Regression und eines Graphen ausgibt. Für beide Szenarien möchte ich, dass der Benutzer die unabhängigen und abhängigen Variablen aus den Spalten der Tabelle auswählt und dieselben Eingaben verwendet, um die Regression und das Diagramm auszuführen. Im Moment kann ich nicht herausfinden, wie man die vom Benutzer gewählte Eingabe für eine Anzeige in plotly übergibt. Kann jemand helfen, danke im Voraus! HierReaktive Eingabe in die Achse eines Diagramms in R Shiny übergeben

ist die Beispieldaten:

 AvgIR SumCount   AvgLTV  AvgGFEE AvgRTC  Date 
1: 0.04106781 180029 0.753180543134717 0.002424778 319.6837 2015-10-01 
2: 0.04036154 160061 0.738038310394162 0.002722529 312.6314 2015-11-01 
3: 0.04001407 145560 0.739287372904644 0.002425912 313.0351 2015-12-01 
4: 0.04034078 147693 0.739693214979721 0.002600640 315.0238 2016-01-01 
5: 0.04055688 142545 0.734515977410642 0.002449523 310.3950 2016-02-01 
6: 0.04007467 176344 0.735780463185592 0.002459228 309.9615 2016-03-01 

Hier ist die ui:

ui <- fluidPage(
    headerPanel("Regression and Time Series Analysis"), 
    sidebarPanel(
    p("Select a Dependent Variable"), 
    selectInput(inputId = "DepVar", label = "Dependent Variables", multiple = FALSE, choices = names(RegData2)), 
    p("Select input(s) for the Independent Variable(s)"), 
    selectInput(inputId = "IndVar", label = "Independent Variables", multiple = FALSE, choices = list("SumCount", "AvgIR", "AvgLTV", "AvgGFEE", "AvgRTC", "Date"), selected = "AvgLTV"), 
    p("Summary of Regression"), 
    verbatimTextOutput(outputId = "RegSum") 
), 
    mainPanel(
    verbatimTextOutput(outputId = "IndPrint"), 
    verbatimTextOutput(outputId = "DepPrint"), 
    verbatimTextOutput(outputId = "test"), 
    verbatimTextOutput(outputId = "xaxis"), 
    verbatimTextOutput(outputId = "yaxis"), 
    tableOutput("table"), 
    plotlyOutput("graph") 
) 
) 

Hier ist der Server:

server <- function(input, output) { 

    lm1 <- reactive({lm(reformulate(input$IndVar, input$DepVar), data = RegData2)}) 

    Ind <- reactive({input$IndVar}) 
    Dep <- reactive({input$DepVar}) 
    plotdata <- reactive({as.data.frame(RegData2[, c(which(names(RegData2) == Ind()), which(names(RegData2) == Dep())), with = FALSE])}) 

    xaxis <- reactive({names(RegData2)[which(names(RegData2) == Ind())]}) 
    yaxis <- reactive({names(RegData2)[which(names(RegData2) == Dep())]}) 

#  xaxisN <- reactive({names(xaxis())}) 
#  yaxisN <- reactive({names(yaxis())}) 

    output$table <- renderTable({ 
     x<-plotdata() 
     #RegData2[, c(which(names(RegData2) == Ind()), which(names(RegData2) == Dep())), with = FALSE] 

    }) 

    output$graph <- renderPlotly({ 

     #xaxis <- paste(input$IndVar) 
     #yaxis <- paste(input$DepVar) 

     #THIS ONE WORKS, but isn't reactive 
     #plot<-plot_ly(plotdata(), x = ~AvgLTV, y = ~AvgIR, mode = "markers", type = "scatter") 

     #THIS ONE DOESN'T WORK, is reactive 
     plot<-plot_ly(plotdata(), x = ~input$IndVar, y = ~input$DepVar, mode = "markers", type = "scatter") 


    }) 


    output$IndPrint <- renderPrint({str(Ind())}) 
    output$test <- renderPrint({str(plotdata())}) 
    output$xaxis <- renderPrint({xaxis()}) 
    output$yaxis <- renderPrint({yaxis()}) 
    output$DepPrint <- renderPrint({input$DepVar}) 
    output$RegSum <- renderPrint({summary(lm1())}) 

} 

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

Nicht vertraut mit ', mit = FALSE' in der' plotdata' reaktiv. Was soll das tun? Ich bekomme trotzdem einen Fehler. –

+0

Vielen Dank für die folgende Antwort, Ihre Lösung hat funktioniert! Das "with = FALSE" für data.tables setzt die Daten nur auf die beiden Spalten, die ich im "j" -Anteil der Anweisung für Zeichenwerte eingegeben habe. Z.B. [i, j, durch]. Mit der folgenden Anweisung: RegData2 [c (welche (Name (RegData2) == "AvgLTV"), die (Namen (RegData2) == "AvgIR")), mit = FALSE] es gibt diesen: AvgLTV AvgIR 1: 0,753180543134717 0,04106781 2: 0,738038310394162 0,04036154 3: 0,739287372904644 0,04001407 ohne "mit = FALSE" kehrt Position der Spaltenüberschriften: [1] 3 1 – Jst2Wond3r

+1

Ok. Ich möchte nur darauf hinweisen, dass du jetzt auch upvoten kannst :) –

Antwort

1

ich glaube, das Problem ist, kann man nicht Verwenden Sie Variablenselektoren in plotly, wie die aes_string Funktion würde für Sie in ggplot2 tun - zumindest so, wie Sie es versucht haben.

Es mag einen Weg geben, Charakternamen plotly zu übergeben, aber die Dokumente sind wirklich nicht großartig und ich konnte nichts finden.

Allerdings habe ich diese Arbeit gemacht - was akzeptabel sein könnte.

  • Setzen Sie den Plot-Datenrahmen in eine lokale Variable df.
  • erstellt zwei neue Variablen xx und yy mit den Variablen
  • overrode die xaxis und yaxis Etiketten mit dem layout Befehl aufgetragen werden. Diese

gemacht output$graph wie folgt aussehen:

output$graph <- renderPlotly({ 

    df <- plotdata() 
    df$xx <- df[[input$IndVar]] 
    df$yy <- df[[input$DepVar]] 
    plot<-plot_ly(df, x = ~xx, y = ~yy, mode = "markers", type = "scatter") %>% 
         layout(xaxis = list(title=input$IndVar), 
           yaxis = list(title=input$DepVar)) 
    plot 
    }) 

Nachgeben:

enter image description here

Hinweis: Hier ist, wie ich neu formatiert und die Daten eingegeben, falls jemand eine repro will - nahm ca. 5 Minuten:

AvgIR <- c(0.04106781,0.04036154,0.04001407,0.04034078,0.04055688,0.04007467 ) 
SumCount <-c(180029 ,160061 ,145560 ,147693 ,142545 ,176344) 
AvgLTV <-c(0.753180543134717 ,0.738038310394162 ,0.739287372904644 ,0.739693214979721 ,0.734515977410642 ,0.735780463185592) 
AvgGFEE<-c(0.002424778 ,0.002722529 ,0.002425912 ,0.002600640 ,0.002449523 ,0.002459228) 
AvgRTC <-c(319.6837,312.6314 ,313.0351 ,315.0238 ,310.3950 ,309.9615) 
Date <- c("2015-10-01","2015-11-01","2015-12-01","2016-01-01","2016-02-01","2016-03-01") 
RegData2 <- data.frame(AvgIR=AvgIR,SumCount=SumCount,AvgLTV=AvgLTV,AvgGFEE=AvgGFEE,AvgRTC=AvgRTC,Date=Date) 
RegData2$Date <- as.POSIXct(RegData2$Date) 
Verwandte Themen