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

问题描述 投票:0回答:1

我有两个用

DT::datatable()
生成的 Shiny 表。这些表具有相同的维度,但来自不同的数据框,因此具有不同的列(与下面的虹膜数据不同)。表格将位于同一页上。

我可以链接两个表格,以便如果我按一个表格的“下一步”按钮(或页码),两个表格会同时更改吗?也就是说,按“下一步”会将两个表移至下一页。按 3 将两个表格移至第 3 页。

在下面的示例中,我显示了两个表的分页控件,但如果我可以链接它们,那么仅显示上表的控件会更清晰。

library(shiny)
library(DT)

ui <- fluidPage(
  h5("Table 1"),
  DTOutput("table1"),
  h5("Table 2"),
  DTOutput("table2")
)

server <- function(input, output, session) {
  
  output$table1 <- renderDT({
    datatable(
      iris[iris$Species == "setosa", ],
      options = list(
        dom = '<"top" p>',
        pageLength = 6)
    )
  })
  output$table2 <- renderDT({
    datatable(
      iris[iris$Species == "virginica", ],
      options = list(
        dom = "tp",
        pageLength = 6)
    )
  })
}

shinyApp(ui = ui, server = server)  

创建于 2023-11-07,使用 reprex v2.0.2

r shiny dt
1个回答
0
投票

您可以使用

input$table1_rows_current
链接两个表。然后使用
displayStart
选项根据另一个表中的显示来更新表中的显示。试试这个

library(shiny)
library(DT)

ui <- fluidPage(
  h5("Table 1"),
  DTOutput("table1"),
  h5("Table 2"),
  DTOutput("table2")
)

server <- function(input, output, session) {
  rv <- reactiveValues(
    table1CurrentPage = 0,
    table2CurrentPage = 0
  )
  
  output$table1 <- renderDT({
    datatable(
      iris[iris$Species == "setosa", ],
      options = list(
        dom = '<"top" p>',
        displayStart = rv$table1CurrentPage,
        pageLength = 6)
    )
  })
  output$table2 <- renderDT({
    datatable(
      iris[iris$Species == "virginica", ],
      options = list(
        dom = "tp",
        displayStart = rv$table2CurrentPage,
        pageLength = 6)
    )
  })
  
  observeEvent(input$table2_rows_current, {
    rv$table1CurrentPage <- input$table2_rows_current[1] - 1
  })
  observeEvent(input$table1_rows_current, {
    rv$table2CurrentPage <- input$table1_rows_current[1] - 1
  })

}

shinyApp(ui = ui, server = server) 
© www.soinside.com 2019 - 2024. All rights reserved.