使用 htmltools::withTags() 更改 R 中数据表的页脚
Changing the footer of a Datatable in R using htmltools::withTags()
我正在尝试更改 Shiny App 中数据表的页脚。我可以使用以下代码复制我在应用程序中遇到的错误:
dt_test <- tibble(cntry = c("A","A","B"),
city = c("X","Y","Z"),
sales = c(1000,1500,500),
score = c(1.1234,5.1234,2.1234))
footer <- sapply(dt_test, function(x) ifelse((is.numeric(x)), sum(x), ""))
sketch <- htmltools::withTags(table(
tableHeader(dt_test),
tableFooter(footer)
))
sketch
R 显示:
Error in writeImpl(text) :
Text to be written must be a length-one character vector
但如果我直接将页脚的定义作为参数,它就起作用了:
sketch <- htmltools::withTags(table(
tableHeader(dt_test),
tableFooter(sapply(dt_test, function(x) ifelse( (is.numeric(x)),sum(x), "" ))
)))
不幸的是,我不能使用这种方法,因为聚合包含很多业务逻辑,并且在单独的函数中执行。
我在这里做错了什么?
问题是 footer
是标签的名称,即 <footer>
标签。因此,当在 htmltools::withTags
中使用 footer
时,您实际上是将 tags$footer
(这是一个函数)传递给 tableFooter
而不是存储在矢量页脚中的内容。这就是您收到错误消息的原因,也是您直接传递定义时代码正常工作的原因。
这表示有两个选项可以使您的代码正常工作:
选项 1:使用 htmltools::tags$...
而不是 htmltools::withTags
library(tibble)
library(DT)
sketch <- htmltools::tags$table(
tableHeader(dt_test),
tableFooter(footer)
)
选项 2:重命名变量
footer1 <- footer
sketch <- htmltools::withTags(table(
tableHeader(dt_test),
tableFooter(footer1)
))
我正在尝试更改 Shiny App 中数据表的页脚。我可以使用以下代码复制我在应用程序中遇到的错误:
dt_test <- tibble(cntry = c("A","A","B"),
city = c("X","Y","Z"),
sales = c(1000,1500,500),
score = c(1.1234,5.1234,2.1234))
footer <- sapply(dt_test, function(x) ifelse((is.numeric(x)), sum(x), ""))
sketch <- htmltools::withTags(table(
tableHeader(dt_test),
tableFooter(footer)
))
sketch
R 显示:
Error in writeImpl(text) :
Text to be written must be a length-one character vector
但如果我直接将页脚的定义作为参数,它就起作用了:
sketch <- htmltools::withTags(table(
tableHeader(dt_test),
tableFooter(sapply(dt_test, function(x) ifelse( (is.numeric(x)),sum(x), "" ))
)))
不幸的是,我不能使用这种方法,因为聚合包含很多业务逻辑,并且在单独的函数中执行。 我在这里做错了什么?
问题是 footer
是标签的名称,即 <footer>
标签。因此,当在 htmltools::withTags
中使用 footer
时,您实际上是将 tags$footer
(这是一个函数)传递给 tableFooter
而不是存储在矢量页脚中的内容。这就是您收到错误消息的原因,也是您直接传递定义时代码正常工作的原因。
这表示有两个选项可以使您的代码正常工作:
选项 1:使用 htmltools::tags$...
而不是 htmltools::withTags
library(tibble)
library(DT)
sketch <- htmltools::tags$table(
tableHeader(dt_test),
tableFooter(footer)
)
选项 2:重命名变量
footer1 <- footer
sketch <- htmltools::withTags(table(
tableHeader(dt_test),
tableFooter(footer1)
))