2016-07-26 2 views
2

У меня есть реактивная функция (datasplit), которая ничего не делает, кроме подмножества данных на основе значений sliderInput. И моя вторая реактивная функция (selectedData) должна принимать данные подмножества из первой реактивной функции и снова фильтровать столбцы на основе SelectInput.Передача данных между реактивными функциями - Shiny R

Наконец-то кластеризация основана на этих данных.

Что работает реактивная функция 2, которая принимает входные данные от SelectInput, но сбой при первой реактивной функции.

любая помощь очень ценится. Я не могу загрузить данные, но для справки мой блестящий код.

Блестящий код:

 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) 

данные:

 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

что 'данные '? –

+0

Данные @PorkChop - это dataframe с 25 столбцами – user3560220

+0

Пожалуйста, предоставьте данные –

ответ

0

Поскольку у меня нет данных, я не мог проверить следующий код. Более того, я не мог понять, почему вы обрабатываете свои входы (ввод $ col) в качестве функций (input $ col()). Я реализовал эту вложенную подмножество много раз. Вы можете добавить несколько фильтров. Надеясь, что ваши функции субпопуляции работает без сбоев, следующее поможет:

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) 
      } 
      }) 

Если вы не получаете выходной участок, вы могли бы рассмотреть вопрос о переходе на расчет kmeans вне реактивной петли

+0

Я пробовал свои методы. но все еще не удается. Единственная проблема, которую я вижу, заключается в том, что функция Subset выполняет работу с входными функциями из пользовательского интерфейса. Я обновил вопрос с образцовыми данными. вы также можете это сделать. Если я жестко закодирую столбцы, то он работает, но когда я заберу его из пользовательского интерфейса, он не сработает. – user3560220

+0

может использовать функцию dput для отправки небольшого набора ваших данных, например, 3-4 строки – Apricot

+0

, спасибо за интерес к решение проблемы. У меня есть данные уже в вопросе. 2 столбца (cnt, av_cst), который используется для кластеризации. Вы хотите загрузить и отправить ссылку? – user3560220

Смежные вопросы