使用 replaceData 函数替换 R formattable 数据表中的数据

Replace data in R formattable datatable using replaceData function

我需要顺利地替换(格式table)数据table中的数据,并且在重新加载时页面不会闪烁。

这里参考@yihui的例子:https://github.com/rstudio/DT/issues/168我已经成功地使用dataTableProxy函数成功地替换了标准数据table中的数据而没有页面闪烁

当通过格式 table 包包含格式时,我的代码会抛出错误: 警告:as.data.frame.default 中的错误:无法将 class "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'))
                )))
        })
    }
)

当我移动滑块时,我希望 table 重新加载,同时保留格式table 样式。

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]
  )
})