带有kable的Rmarkdown中的动态选项卡和表格

时间:2017-07-06 14:33:32

标签: r dynamic knitr

我正在使用以下代码在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)
```

我之前看到它有效,但我无法真正缩小它为什么有时会失败。当它失败时,它看起来像这样 enter image description here

当我查看HTML代码时,这些表是段落,但是当它正常工作时,它应该呈现为表格...

1 个答案:

答案 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()

enter image description here

我的方法的一个缺点是它输出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
    )

enter image description here

(我使用了一个更大的示例表来使其看起来更逼真。)