rmarkdown使用kable with data of data.tables丢失表格格式

时间:2018-04-24 16:05:36

标签: r r-markdown tabular kable

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

我想要实现的是使用kable添加带有标题的文档中的所有表格。

当我像这样逐个索引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

但是,如果我尝试使用lapplykable列表中的所有data.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

此外,如果我只是将data.table的列表传递给kable,就像这样

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

我得到的所有表格都有更好的格式(虽然不像第一个例子中那样),但堆叠在彼此的顶部,居中在页面中间,我无法添加标题:

enter image description here

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

EDIT1:

我已将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

EDIT2:

正如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

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

EDIT3

最后一个问题(见上文)是将表格及其标题对齐到左侧。 user20650提出了一个适用于字幕的建议。在找到this email thread后,我修改了yaml标题,如下所示,将这些LaTeX选项添加到header-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:的前两行(加载caption包并定义阳台的设置)将标题的位置固定为左侧。最后一行加载floatrow包并修复边距。

案件结案。

0 个答案:

没有答案