我有一个使用
R
语言中的shiny
应用程序,其中有一个使用datatable
函数渲染的DT
数据表。我想使用dataTableProxy
和replaceData
来更新表格中的数据,但是我找到的所有示例都假定DT
直接从数据对象呈现,而不是使用datatable
函数。下面的示例演示了我想要实现的内容,但是这种模式下replaceData
不起作用。我该如何操作?谢谢。
# based on
# https://community.rstudio.com/t/reorder-data-table-with-seleceted-rows-first/4254
library(shiny)
library(DT)
ui = fluidPage(
actionButton("button1", "Randomize"),
fluidRow(
column(6,
h4("Works"),
DT::dataTableOutput('table1', width="90%")),
column(6,
h4("Doesn't Work"),
DT::dataTableOutput('table2', width="90%"))
)
)
server = function(input, output, session) {
my <- reactiveValues(data = iris)
output$table1 <- DT::renderDataTable(isolate(my$data))
output$table2 <- DT::renderDataTable({
DT::datatable(isolate(my$data),
options = list(lengthChange=FALSE, ordering=FALSE, searching=FALSE,
columnDefs=list(list(className='dt-center', targets="_all")),
stateSave=TRUE, info=FALSE),
class = "nowrap cell-border hover stripe",
rownames = FALSE,
editable = FALSE
) %>%
DT::formatStyle('Sepal.Width', `text-align`="center")
})
observeEvent(input$button1, {
# calculate new row order
row_order <- sample(1:nrow(my$data))
my$data <- my$data[row_order, ]
proxy1 <- DT::dataTableProxy('table1')
DT::replaceData(proxy1, my$data)
proxy2 <- DT::dataTableProxy('table2')
DT::replaceData(proxy2, my$data)
})
}
shinyApp(ui, server)
replaceData
函数并设置选项rownames = FALSE
,即DT::replaceData(proxy2, my$data, rownames = FALSE)
。该函数将替换数据表格中的内容,并且不包含原本的行名信息。 - Stéphane Laurent