我正在使用以下代码在Rmarkdown中创建包含表格的动态标签。
# TEST
``` {r echo=FALSE, results = 'asis', message = FALSE, warnings = FALSE}
print_month <- function(month) {
cat(" \n##", format(month, "%B"), " results \n")
print(knitr::kable(data.frame(A = c(1,2,3), B = c(1,2,3))))
cat(" \n")
}
seq.Date(from = ymd(20170101), to = ymd(20170601), by = 'month') %>%
purrr::walk(print_month)
```
我之前看到它有效,但我无法真正缩小它为什么有时会失败。当它失败时,它看起来像这样
当我查看HTML代码时,这些表是段落,但是当它正常工作时,它应该呈现为表格...
答案 0 :(得分:2)
也许print()
和cat()
函数可能互相交互?
我更喜欢函数返回单个汇编的字符串,让调用者决定如何输出它。
library(magrittr)
library(lubridate)
assemble_month <- function(month) {
d <- mtcars[1:5, 1:6] #data.frame(A = c(1,2,3), B = c(1,2,3))
html_table <- knitr::kable(d, format = "html")
paste0(
"\n##", format(month, "%B"), " results\n",
html_table,
"\n"
)
}
seq.Date(from = ymd(20170101), to = ymd(20170601), by = 'month') %>%
purrr::map_chr(assemble_month) %>%
cat()
我的方法的一个缺点是它输出html表的方式无法利用knitr的漂亮的markdown-to-html css格式。我通常会使用kableExtra添加样式,因此html_table
变为
html_table <- mtcars[1:5, 1:6] %>%
knitr::kable(format = "html") %>%
kableExtra::kable_styling(
bootstrap_options = c("striped", "hover", "condensed", "responsive"),
full_width = F
)
(我使用了一个更大的示例表来使其看起来更逼真。)