我可以在R Shiny中链接单独的DT表的分页吗?

zf2sa74q  于 2023-11-14  发布在  其他
关注(0)|答案(2)|浏览(119)

我在Shiny中用DT::datatable()生成了两个表。这两个表具有相同的维度,但来自不同的 Dataframe ,因此是不同的列(不像下面的虹膜数据)。这两个表将在同一页上。
我是否可以链接两个表格,以便在按下一个表格的“下一步”按钮(或页码)时,两个表格同时更改?也就是说,按“下一步”将两个表格移到下一页。按3将两个表格移到第3页。
在下面的示例中,我显示了两个表的分页控件,但是如果我可以链接它们,那么只显示上层表的控件会更清晰。

  1. library(shiny)
  2. library(DT)
  3. ui <- fluidPage(
  4. h5("Table 1"),
  5. DTOutput("table1"),
  6. h5("Table 2"),
  7. DTOutput("table2")
  8. )
  9. server <- function(input, output, session) {
  10. output$table1 <- renderDT({
  11. datatable(
  12. iris[iris$Species == "setosa", ],
  13. options = list(
  14. dom = '<"top" p>',
  15. pageLength = 6)
  16. )
  17. })
  18. output$table2 <- renderDT({
  19. datatable(
  20. iris[iris$Species == "virginica", ],
  21. options = list(
  22. dom = "tp",
  23. pageLength = 6)
  24. )
  25. })
  26. }
  27. shinyApp(ui = ui, server = server)

字符串
创建日期:2023年11月7日,使用reprex v2.0.2

ttygqcqt

ttygqcqt1#

我建议沿着使用dataTableProxy。这比每次单击按钮后重新呈现表要快:

  1. library(shiny)
  2. library(DT)
  3. ui <- fluidPage(
  4. h5("Table 1"),
  5. DTOutput("table1"),
  6. h5("Table 2"),
  7. DTOutput("table2")
  8. )
  9. server <- function(input, output, session) {
  10. output$table1 <- renderDT({
  11. datatable(
  12. iris[iris$Species == "setosa", ],
  13. options = list(
  14. dom = '<"top" p>',
  15. pageLength = 6)
  16. )
  17. })
  18. output$table2 <- renderDT({
  19. datatable(
  20. iris[iris$Species == "virginica", ],
  21. options = list(
  22. dom = "tp",
  23. pageLength = 6)
  24. )
  25. })
  26. table1Proxy <- dataTableProxy("table1")
  27. table2Proxy <- dataTableProxy("table2")
  28. observeEvent(input$table1_rows_current, {
  29. selectPage(table2Proxy, page = ceiling(max(input$table1_rows_current) / input$table1_state$length))
  30. })
  31. observeEvent(input$table2_rows_current, {
  32. selectPage(table1Proxy, page = ceiling(max(input$table2_rows_current) / input$table2_state$length))
  33. })
  34. }
  35. shinyApp(ui = ui, server = server)

字符串

展开查看全部
z4bn682m

z4bn682m2#

您可以使用input$table1_rows_current链接这两个表。然后使用displayStart选项根据另一个表中的显示更新另一个表中的显示。尝试以下操作

  1. library(shiny)
  2. library(DT)
  3. ui <- fluidPage(
  4. h5("Table 1"),
  5. DTOutput("table1"),
  6. h5("Table 2"),
  7. DTOutput("table2")
  8. )
  9. server <- function(input, output, session) {
  10. rv <- reactiveValues(
  11. table1CurrentPage = 0,
  12. table2CurrentPage = 0
  13. )
  14. output$table1 <- renderDT({
  15. datatable(
  16. iris[iris$Species == "setosa", ],
  17. options = list(
  18. dom = '<"top" p>',
  19. displayStart = rv$table1CurrentPage,
  20. pageLength = 6)
  21. )
  22. })
  23. output$table2 <- renderDT({
  24. datatable(
  25. iris[iris$Species == "virginica", ],
  26. options = list(
  27. dom = "tp",
  28. displayStart = rv$table2CurrentPage,
  29. pageLength = 6)
  30. )
  31. })
  32. observeEvent(input$table2_rows_current, {
  33. rv$table1CurrentPage <- input$table2_rows_current[1] - 1
  34. })
  35. observeEvent(input$table1_rows_current, {
  36. rv$table2CurrentPage <- input$table1_rows_current[1] - 1
  37. })
  38. }
  39. shinyApp(ui = ui, server = server)

字符串

展开查看全部

相关问题