【问题标题】:How to print kable output to pdf in a loop如何在循环中将 kable 输出打印到 pdf
【发布时间】:2021-03-24 00:07:02
【问题描述】:

我正在尝试从循环中将表格打印为 pdf,但我一直没有运气。我最初使用的是 Flextable,但在网上看到 cmets 无法做到这一点是它的问题。所以,我改用 Kable 和 Kableextra。我仍然没有成功完成这项工作。那里有一些线索暗示了各种各样的事情。我已经尝试了所有这些,但似乎没有什么对我有用。因此,我创建了一个非常简单的示例来说明我的位置,我希望有人能够向我展示这是如何完成的。

这是 RMarkdown 代码。

---
title: "test_print"
output: pdf_document
---
knitr::opts_chunk$set(echo = FALSE)
library(kableExtra)
#create a list and put two kables in it
lst <- vector("list", 2)
lst[[1]] <- kbl(head(cars), booktabs = T)
lst[[2]] <- kbl(head(pressure), booktabs = T)
lst[[1]]  #this code works fine producing a table in the pdf file
for (i in 1:2)
{
  lst[[i]]   #this code produces no output at all
}
#this produces a shiny tag list with the reports seemingly there but they do not output properly
for (i in 1:2)
{
  print(lst[[i]])  
}

网上有很多关于如何解决这个问题的建议,但我一直无法解决。例如,在几个地方它说你必须将 kable 包装在 print 中,因为副作用在循环中无法正常工作。

我是 R 和 RMarkdown 的新手,所以我可能在这里遗漏了一些简单的东西,但也有足够多的其他人遇到过这个问题(鉴于我找到的线程),所以也许它毕竟不是那么简单。

我将不胜感激并提供有关如何解决此问题的想法。

【问题讨论】:

  • 你只需要在 RMarkdown 块中包含results = 'asis'。详情请见this
  • 谢谢,我以前发现过这个,但不知怎的,我从来没有得到正确的组合——请参阅我对自己问题的回答。

标签: r for-loop pdf printing kable


【解决方案1】:

我能够为我自己的问题想出一个答案,由于我在整理网上找到的所有各种“答案”时遇到了麻烦,我想我会在这里给出对我有用的答案。它是现有建议的组合。

---
title: "test_print"
output: pdf_document
---
knitr::opts_chunk$set(echo = FALSE)
library(kableExtra)
lst <- vector("list", 2)
lst[[1]] <- kbl(head(cars), booktabs = T)
lst[[2]] <- kbl(head(pressure), booktabs = T)
for (i in 1:2){
  print(lst[[i]])
  cat("\n\n\\pagebreak\n")
}

密钥将 kable 包装在打印语句中,将 results='asis' 添加到块头,然后在打印后添加 cat("\n\n\\pagebreak\n") 语句。

我多次看到只添加cat("\n") 的建议,但这不起作用——至少不是在pdf 中。我需要在每个表格之后强制分页,这对我有用。

现在我有一个新问题。虽然这适用于只有 2 个表的简化示例,但我的实际代码有 63 个需要打印的表。我现在收到一个 LaTeX 错误,说我有太多未处理的浮点数。我尝试限制打印出的表格(至 5 个)并且效果很好,所以问题肯定是表格的数量。 正在寻找解决方案,但如果有人知道答案,请传递。我知道我不应该在这里提问,如果我找不到答案,我肯定会在另一个问题中正确提问。只是想如果你已经读到这里,你可能能够提供帮助。

【讨论】:

  • 最后一个答案很容易找到。我需要增加可用的浮点数,因为默认值小于我正在创建的报告数。我使用了命令\extrafloats{200},我的报告现在可以正常输出了。
猜你喜欢
  • 2011-08-18
  • 2021-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-09
  • 2023-03-20
相关资源
最近更新 更多