如何在R语言的sapply函数中使用kable?
如何在sapply中使用knitr::kable格式化多列频数表
当然可以在sapply中用kable,你报错是因为函数参数的写法不对。
错误原因
你写的sapply(iris[1:4], knitr::kable(table))有两个问题:
table没有接收sapply传递的每一列数据,相当于直接调用无参数的table(),生成的结果不是你需要的列频数表kable需要传入已经生成的表格对象,而不是这种嵌套的函数调用方式
正确写法
给sapply传递一个匿名函数,先对每列生成频数表,再用kable格式化:
sapply(iris[1:4], function(x) { knitr::kable(table(x), caption = paste("列", deparse(substitute(x)), "的频数表")) })
额外优化
如果想让表格标题更清晰,直接用列名来标注:
cols <- names(iris[1:4]) sapply(cols, function(col) { knitr::kable(table(iris[[col]]), caption = paste("列", col, "的频数表")) })
替代方案(更直观)
用purrr包的map函数,语法更简洁易懂:
library(purrr) map(iris[1:4], ~knitr::kable(table(.x), caption = paste("列", names(.x), "的频数表")))
内容的提问来源于stack exchange,提问作者Ghose Bishwajit
相关产品推荐
相关产品推荐

