我有一个反应性函数(Datasplit),它只做基于值sliderInput的数据设置。我的第二个反应函数(SelectedData)应该从第一个反应性函数中获取子集数据,然后基于SelectInput再次过滤列。
最后根据这些数据进行聚类。
起作用的是反应函数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
发布于 2016-07-28 07:38:41
由于我没有数据,所以无法测试以下代码。此外,我不明白为什么要将输入(输入$col)看作函数(输入$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计算移到反应性循环之外。
https://stackoverflow.com/questions/38590185
复制