Shiny多renderDataTable场景下如何获取选中行ID?
解决Shiny多DT表格选中行获取问题
你的代码里始终拿到NULL的核心问题是搞错了选中行的输入ID规则:每个dataTableOutput组件对应的选中行输入参数,格式是{表格ID}_rows_selected,比如你第一个表格的ID是table1,那它的选中行应该用input$table1_rows_selected获取,而不是通用的input$table_rows_selected。
下面是修正后的完整代码,同时实现了获取iris选中行的Species值:
library(shiny) library(DT) shinyApp( ui = fluidPage( dataTableOutput("table1"), dataTableOutput("table2"), textOutput("text1"), textOutput("text2") ), server = function(input, output) { # 渲染iris表格 output$table1 <- renderDataTable({ datatable(iris) }) # 渲染mtcars表格 output$table2 <- renderDataTable({ datatable(mtcars) }) # 显示table1选中行的Species output$text1 <- renderText({ if(length(input$table1_rows_selected) > 0){ # 获取选中行的Species列值 selected_species <- iris[input$table1_rows_selected, "Species"] paste("选中的iris物种:", paste(selected_species, collapse = ", ")) } else { "未选中iris表格的任何行" } }) # 显示table2选中的行号 output$text2 <- renderText({ if(length(input$table2_rows_selected) > 0){ paste("选中的mtcars行号:", paste(input$table2_rows_selected, collapse = ", ")) } else { "未选中mtcars表格的任何行" } }) } )
关键修改说明:
- 分别使用
input$table1_rows_selected和input$table2_rows_selected对应两个表格的选中行 - 在
text1中直接从iris数据框提取选中行的Species值,满足你获取物种的需求 - 优化了空选中时的提示文本,避免使用
print()(renderText只需返回字符串即可)
内容的提问来源于stack exchange,提问作者user24559700
相关产品推荐
相关产品推荐

