我需要平稳地替换(格式表)数据表中的数据,而重新加载时页面不会闪烁。
下面是@yihui的示例:https://github.com/rstudio/DT/issues/168我已经成功地平滑替换了标准数据表中的数据,而无需使用dataTableProxy函数闪烁页面。
当通过formattable包包括格式时,我的代码抛出错误: 警告:as.data.frame.default中的错误:无法将类“ c(” datatables“,” htmlwidget“)”强制转换为data.frame
最小的可复制示例:
library(shiny)
library(DT)
library(formattable)
dt <- data.frame(type = letters[1:5], count = sample(1:10, 5))
shinyApp(
ui = fluidPage(sidebarLayout(
sidebarPanel(
sliderInput(
"number",
"Select:",
min = 0,
max = 10,
value = 8
)
),
mainPanel(DT::dataTableOutput('DTtable'))
)),
server = function(input, output, session) {
# Reactive expression of the data frame, subset by the slider number
sliderValues <- reactive({
# Compose data frame
dt['count' > input$number,]
})
output$DTtable = DT::renderDataTable(as.datatable(formattable(
isolate(sliderValues()),
list(count = color_tile('#ffffff', '#6be560'))
)))
observeEvent(sliderValues(), ignoreInit = T, {
replaceData(dataTableProxy('DTtable'),
as.datatable(formattable(
isolate(sliderValues()),
list(count = color_tile('#ffffff', '#6be560'))
)))
})
}
)
当我移动滑块时,我希望表格重新加载,同时还保留格式表样式。
答案 0 :(得分:2)
sliderValues
中的小错误。替换为
sliderValues <- reactive({
# Compose data frame
dt[dt$count > input$number,]
})
现在,replaceData
在第二个参数中需要一个数据框,而不是数据表。这就是为什么您会收到此错误。当您有数据表dtable
时,数据帧位于dtable$x$data
中。但是行名还有一个附加列,必须将其删除。也是这样:
observeEvent(sliderValues(), ignoreInit = TRUE, {
replaceData(dataTableProxy('DTtable'),
as.datatable(formattable(
isolate(sliderValues()),
list(count = color_tile('#ffffff', '#6be560'))
))$x$data[,-1]
)
})