复选框 Shiny R 的反应性 k 均值分析

Posted

技术标签:

【中文标题】复选框 Shiny R 的反应性 k 均值分析【英文标题】:Reactive k-means analysis on checkboxes Shiny R 【发布时间】:2021-12-13 13:29:43 【问题描述】:

我有一些数据

df <- as.data.frame(cbind(
  lat = rnorm(150, mean = 30, sd = 5),
  lon = rnorm(150, mean = 10, sd = 5),
  iris[, 1:4]))

我有一个 UI,它允许我根据 DF 中存在的列/变量(不包括纬度和经度)通过复选框从 excellent demo 中选择。

ui <- fluidPage(
  sidebarLayout(
    sidebarPanel(
      checkboxGroupInput("show_vars", "Selectable variables for k-means",
                         names(df[, 3:6]), selected = names(df[, 3:6])),
      numericInput('clusters', 'Cluster count', 3, min = 1, max = 9),
    ),
    # mainPanel(plotOutput("plot1"))))
    mainPanel(DT::dataTableOutput('mytable1'))))

我可以看到这与以下内容一起使用

server <- function(input, output) 
  
  #### choose columns to display
  
  output$mytable1 <- DT::renderDataTable(
    DT::datatable(df[, input$show_vars, drop = FALSE])
  )
  



shinyApp(ui, server)

我想按以下顺序做什么

1 - 对所选数据运行 k-means 分析

2 - 将集群输出 (kmeans_run$cluster) 绑定到子集数据表

3 - ggplot color=clustercolor=cluster

我可以很容易地在 r 中做到这一点

library(ggplot2)

df <- as.data.frame(cbind(
  lat = rnorm(150, mean = 30, sd = 5),
  lon = rnorm(150, mean = 10, sd = 5),
  iris[, 1:4]))

km <- kmeans(df[, 3:4], 4)
df$cluster <- km$cluster

ggplot(df, aes(lon,
           lat,
           color=cluster)) +
         geom_point()

我一直在扼杀这个有用的demo,它有点适用于 k-means,但我很难让它只用一个数据集运行它。

ui1 <- fluidPage(
  sidebarLayout(
    sidebarPanel(
      checkboxGroupInput("show_vars", "Selectable variables for k-means",
                         names(df[, 3:6]), selected = names(df[, 3:6])),
      numericInput('clusters', 'Cluster count', 3, min = 1, max = 9),
    ),
    mainPanel(plotOutput("plot1"))))

server1 <- function(input, output, session) 
  
  # Combine the selected variables into a new data frame
  selectedData <- reactive(df[, input$show_vars, drop = FALSE])
  
  clusters <- reactive(
    kmeans(selectedData(), input$clusters)
  )
  
  output$plot1 <- renderPlot(
    palette(c("#E41A1C", "#377EB8", "#4DAF4A", "#984EA3",
              "#FF7F00", "#FFFF33", "#A65628", "#F781BF", "#999999"))
    
    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(ui1, server1)

非常感谢,即使答案的第一部分也是王牌!

【问题讨论】:

【参考方案1】:
 clusters <- reactive(
    kmeans(selectedData(), input$clusters)
  )
  
  output$ggplot <- renderPlot(
    ggplot(contin_data,aes(x=bin_median_lon,
                           y=bin_median_lat))+geom_point(colour=clusters()$cluster),
    height = 700, width = 700)

不同的数据,但明白了

【讨论】:

以上是关于复选框 Shiny R 的反应性 k 均值分析的主要内容,如果未能解决你的问题,请参考以下文章

r shiny sqlquery - 从 sql 查询结果中填充复选框

如何在 R Shiny App 中保留复选框中的值?

在 R Shiny 中创建第二个 UI 元素

闪亮/ rscript - 使用checkboxGroupInput整数列表的反应图不起作用

R Shiny:如何使多个元素在添加/删除按钮上下文中具有反应性?

来自 Shiny 的 RODBC 多输入