2016-07-26 17 views
2

Ich habe eine reaktive Funktion (Datasplit), die nichts anderes tut, als die Daten basierend auf Werten sliderInput subsetting. Und meine zweite reaktive Funktion (selectedData) sollte die Teilmenge Daten von der ersten reaktiven Funktion nehmen und die Spalten wieder filtern, die auf SelectInput basieren.Weitergabe von Daten zwischen reaktiven Funktionen - Shiny R

Endlich Clusterbildung basierend auf diesen Daten.

was funktioniert, ist reaktive Funktion 2, die Eingabe von SelectInput, aber nicht bei der ersten reaktiven Funktion.

jede Hilfe sehr geschätzt. Ich kann die Daten nicht hochladen, aber als Referenz meinen glänzenden Code.

Shiny Code:

 library(shiny) 
     ui <- fluidPage(
      selectInput("xcol", "X Variable", names(data[,c(2)])), 
      selectInput("ycol", "Y Variable", names(data[,c(1)])), 
      sliderInput(inputId = "cost", 
         label = "Kosten", 
         value = 1000, min = 1, max = 5000), 
      sliderInput(inputId = "count", 
         label = "Anzahl Fälle", 
         value = 500, min = 1, max = 2000), 
      numericInput("clusters", "Anzahl Cluster", 3, min=1, max= 9), 
      plotOutput(outputId = "plot1") 

     ) 

     server <- function(input, output){ 
      DealerDF <- read.csv(file = "dealer_category.csv",header = T) 
      data <- DealerDF 

      datasplit <- reactive({ 
      subset(data, input$xcol() < input$cost() & input$ycol() < input$count()) 


      }) 


      selectedData <- reactive({ 
      #this seems to be not working 
      datasplit()[, c(input$xcol(), input$ycol())] 
      }) 

      clusters <- reactive({ 
      kmeans(selectedData(), input$clusters) 
      }) 

      output$plot1 <- renderPlot({ 

      if (!is.null(selectedData())) { 
       par(mar= c(5.1, 4.1,0,1)) 
       plot(selectedData(), 
        col= clusters()$cluster, 
        pch= 20, cex=3) 
       points(clusters()$centers, pch=4, cex=4, lwd=4) 
      } 
      }) 

     } 

     shinyApp(ui = ui, server = server) 

Daten:

 cnt av_cst 
     479 2.359.695 
     479 83.439 
     475 891.863 
     474 2.496.681 
     474 97.654 
     474 821.163 
     473 1.650.016 
     473 143.724 
     472 90.398 
     470 98.745 
     468 681.947 
     468 97.392 
     467 435.477 
     467 97.657 
     466 160.547 
     463 98.454 
     30 24.936 
     30 29.432 
     30 1.599.577 
     30 227.073 
     30 227.887 
     30 187.147 
     30 89.697 
     30 615.427 
     30 32.398 
     30 15.133 
     30 24.445.753 
     30 25.944 
     30 344.933 
     30 10.237 
     30 15.86 
     17082 30.425 
     11358 75.541 
     9788 30.638 
     9667 30.381 
     7302 73.051 
     6849 1.009.921 
     6299 124.441 
     6018 30.158 
     5646 124.569 
     5383 1.133.911 
     5381 30.278 
     4357 123.213 
     3989 3.065 
+0

was 'Daten '? –

+0

@PorkChop Daten ist Datenrahmen mit 25 Spalten – user3560220

+0

Bitte geben Sie die Daten –

Antwort

0

Da ich mich nicht die Daten nicht den folgenden Code testen konnte. Außerdem konnte ich nicht verstehen, warum Sie Ihre Eingaben (input $ col) als Funktionen behandeln (input $ col()). Ich habe diese verschachtelte Teilmenge mehrfach implementiert. Sie können mehrere Filter hinzufügen. Hoffnung, dass Ihre Teilmenge Funktionen arbeitet ohne Pannen, wird folgendes helfen:

DealerDF <- read.csv(file = "dealer_category.csv",header = T) 
      data <- reactive({ 
       DealerDF 
      }) 

      datasplit <- reactive({ 
      IstSubset <- subset(data(), input$xcol() < input$cost() & input$ycol() < input$count()) 
      selectedData <- IstSubset[,c(input$xcol(), input$ycol())] 
      clusters <- kmeans(selectedData, input$clusters) 
      clusters 
      }) 


      output$plot1 <- renderPlot({ 
      if (!is.null(dataSplit())) { 
       par(mar= c(5.1, 4.1,0,1)) 
       plot(datasplit(), 
        col= clusters()$cluster, 
        pch= 20, cex=3) 
       points(clusters()$centers, pch=4, cex=4, lwd=4) 
      } 
      }) 

Wenn Sie nicht über die Handlung Ausgabe erhalten, sollten Sie vielleicht die KMeans Berechnung außerhalb der reaktiven Schleife bewegen

+0

Ich habe mit Ihren Methoden versucht. aber immer noch fehlschlägt. Das einzige Problem, das ich sehe, ist, Subset-Funktion doesest arbeiten auf Eingabefunktionen von UI. Ich habe die Frage mit Beispieldaten aktualisiert. Du könntest es auch. Wenn ich die Spalten hart Code, dann funktioniert es, aber wenn ich es von UI zu nehmen, schlägt es fehl – user3560220

+0

können Sie dput-Funktion verwenden, um eine kleine Menge Ihrer Daten, sagen 3-4 Zeilen – Apricot

+0

, Vielen Dank für Ihr Interesse an das Problem lösen. Ich habe Daten bereits in der Frage. 2 Spalten (cnt, av_cst), die für das Clustering verwendet werden. Möchten Sie den Link hochladen und senden? – user3560220

Verwandte Themen