rmarkdown 将 kable 与 data.tables 列表一起使用会丢失表格格式

rmarkdown using kable with list of data.tables loses table formatting

提问人:panman 提问时间:4/25/2018 最后编辑:panman 更新时间:7/13/2020 访问量:6667

问:

我有一个文档,我想使用列表并将它们包含在 PDF/HTML/MS Word 文档中。列表的每个组件都包含一个 .rmarkdowndata.tabledata.table

我试图实现的是用于在带有标题的文档中添加所有表格。kable

当我像这样一一索引 s 时data.table

```{r}
 kable(list.of.dts[[1]], caption = paste0("Frequency table for the '", colnames(list.of.dts[[1]])[2], "' variable."))
```

一切都很好,表格的格式很好,如下面的屏幕截图所示。

enter image description here

但是,如果我尝试像这样使用列表中的所有内容lapplykabledata.tables

```{r}
lapply(X = list.of.dts, FUN = function(i) {
  kable(x = i, caption = paste0("Frequency table for the '", colnames(i)[2], "' variable."))
})
```

要处理所有并将它们包含在文档中,我得到了非常基本和粗略的输出,如下面的屏幕截图所示。data.tables

enter image description here

此外,如果我只是将 s 列表传递给这样data.tablekable

```{r}
kable(list.of.dts)
```

我得到的所有表格都具有更好的格式(尽管不像第一个示例中那样),但堆叠在一起,居中位于页面中间,我无法添加标题:

enter image description here

有谁知道为什么会发生这种情况,我该如何克服这个问题?

编辑1:

我已经放入了第一个示例的块并将输出保存到一个对象,然后返回该对象,它完成了技巧:result="asis"

```{r, echo = FALSE, results='asis'}
my.list2 <- lapply(X = list.of.dts, FUN = function(i) {
  kable(x = i, caption = paste0("Frequency table for the '", colnames(i)[2], "' variable."))
})
my.list2
```

如果我不将输出保存到新对象,然后返回它,那么我会得到一个空白文档。以上工作原理(见下面的屏幕截图)。唯一的问题是,我看到列表组件的名称在表格和表格之间,并且它们的标题在页面中间对齐:

enter image description here

编辑2:

正如 user20650(谢谢)所指出的,显式循环会更好,因为不会显示任何列表组件的名称。除此之外,无需将结果分配给新对象,然后返回它。下面是它的样子:

```{r, echo = FALSE, results='asis'}
for(i in list.of.dts) {
  print(kable(x = i, caption = paste0("Frequency table for the '", colnames(i)[2], "' variable.")))
}
```

enter image description here

唯一剩下的问题是表格仍然在页面中居中。

编辑3

最后一个问题(见上文)是将表格及其标题向左对齐。User20650 提出了一个适用于字幕的建议。找到此电子邮件线程后,我修改了标题如下,并将以下选项添加到该部分:yamlLaTeXheader-includes:

---
title: "My report"
author: "John Doe"
output: pdf_document
toc: true
header-includes:
  - \usepackage{caption}
  - \captionsetup{justification=raggedright,singlelinecheck=false}
  - \usepackage[margins=raggedright]{floatrow}
---

(加载包并定义阳离子的设置)的前两行将字幕的位置固定在左侧。最后一行加载包并固定边距。header-includes:captionfloatrow

案件已结案。

R-Markdown 表格 kable

评论


答: 暂无答案