使用 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]
)
})
我需要顺利地替换(格式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]
)
})