gpt4 book ai didi

r - 如何在 Shiny 中对多个表进行排序

转载 作者:行者123 更新时间:2023-12-04 11:29:51 25 4
gpt4 key购买 nike

有没有办法对表中的列和另一个表中的同一列进行排序?例如,在下面的代码中,我用 mtcars 数据绘制了两个数据表,我想通过单击对第一个表的列 mpg 进行排序,自动在第二个表中显示相同的排序,如果我单击第二个表,则相同,自动排序第一个表。

library(DT)
library(shiny)

ui <- basicPage(
h2("The mtcars data"),
dataTableOutput("mytable"),
br(),
dataTableOutput("mytable2")
)

server <- function(input, output) {
output$mytable = DT::renderDataTable({
mtcars
})
output$mytable2 = DT::renderDataTable({
mtcars
})
}

shinyApp(ui, server)

最佳答案

我尝试使用 stateSave选项与 datatable并相信这可能会有所帮助。 order选项可以保存在 reactiveValues并在任一表的顺序发生变化时进行更新。更改前reactiveValues ,我确保它是从存储的顺序更改的,否则您可能会重复更新 datatable .最后,因为状态会保存在localStorage中,添加stateDuration = -1当用户再次访问应用程序时,将阻止额外订购。

server <- function(input, output, session) {

rv <- reactiveValues(
options = list(stateSave = TRUE,
stateDuration = -1,
order = list())
)

output$mytable = DT::renderDataTable({
datatable(mtcars, options = rv$options)
})

output$mytable2 = DT::renderDataTable({
datatable(mtcars, options = rv$options)
})

observeEvent(input$mytable_state$order, {
if (!identical(rv$options$order, input$mytable_state$order)) {
rv$options$order <- input$mytable_state$order
}
})

observeEvent(input$mytable2_state$order, {
if (!identical(rv$options$order, input$mytable2_state$order)) {
rv$options$order <- input$mytable2_state$order
}
})

}
编辑 :关于添加其他选项,您可以有不同的方法来解决这个问题。
首先,您可以向 rv 添加更多选项(例如,添加 pageLength ):
rv <- reactiveValues(
options = list(stateSave = TRUE,
stateDuration = -1,
pageLength = 5,
order = list())
)
或者,如果您想添加 options内部 datatable ,并且可能在两个表之间使用不同的选项,您可以改为存储 orderrv :
server <- function(input, output, session) {

rv <- reactiveValues(
order = list()
)

output$mytable = DT::renderDataTable({
datatable(mtcars, options = list(
stateSave = TRUE,
stateDuration = -1,
order = rv$order))
})

output$mytable2 = DT::renderDataTable({
datatable(mtcars, options = list(
stateSave = TRUE,
stateDuration = -1,
order = rv$order))
})

observeEvent(input$mytable_state$order, {
if (!identical(rv$order, input$mytable_state$order)) {
rv$order <- input$mytable_state$order
}
})

observeEvent(input$mytable2_state$order, {
if (!identical(rv$order, input$mytable2_state$order)) {
rv$order <- input$mytable2_state$order
}
})

}
在这种情况下, rv$order将仅存储表顺序,而不是所有选项。

关于r - 如何在 Shiny 中对多个表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67584563/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com