我在页面上有可能在列中进行排序的表格,在我重新加载带有反应表的数据后,再次排序,这里是server.R代码:
library(shiny)
shinyServer(function(input, output) {
# Return the requested dataset
datasetInput <- reactive({
switch(input$dataset2,
"[,...]" = diamonds,
"[10:30,...]" = diamonds,
"[31:50,...]" = diamonds)
})
#"[,...]" = diamonds[,],
#"[10:30,...]" = diamonds[10:30,],
#"[31:50,...]" = diamonds[31:50,])
# Show the first "n" observations
output$view <- renderTable({
head(datasetInput())
})
# a large table, reative to input$show_vars
output$mytable1 <- renderDataTable({
library(ggplot2)
datasetInput()[, input$show_vars, drop = FALSE]
})
})
答案 0 :(得分:0)
保留排序顺序(和选择)的最佳方法是使用proxyDataTable和replaceData来更新数据,而不是每次更新数据时都创建新表:
Employee ReportsTo Depth TreePath
a NULL 0 a
b a 1 a -> b
c a 2 a -> b -> c
d a 3 a -> b -> c -> d
c b 1 b -> c
d b 2 b -> c -> d
d c 1 c -> d
但有几点需要注意。如果您正在使用模块,请查看此主题以确保您将正确的会话变量传递给代理:https://github.com/rstudio/DT/issues/359
另外,如果对数据表使用rownames = false,则还必须将参数传递给replaceData。
如果proxyDataTable不是一个选项,你也可以在DT :: renderDataTable中使用回调:
mydata = reactive({
df$ID <<- c(df$ID[n], df$ID[-n])
df
})
output$foo = DT::renderDataTable(isolate(mydata()))
proxy = dataTableProxy('foo')
observe({
replaceData(proxy, mydata(), resetPaging = FALSE)
})
my.js中的javascript函数(存储在www目录中):
#include some javascript
tags$head(tags$script(src="my.js"))
#options to renderDataTable
preDrawCallback = JS("initTableOrder"),
drawCallback = JS("saveTableOrder")