pan*_*man 5 r tabular r-markdown kable
我有一个rmarkdown要使用data.tables 列表并将其包含在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."))
```
Run Code Online (Sandbox Code Playgroud)
一切都很好,并且表格的格式正确,如下面的屏幕截图所示。
但是,如果我尝试使用lapply到kable所有data.tables在列表中这样
```{r}
lapply(X = list.of.dts, FUN = function(i) {
kable(x = i, caption = paste0("Frequency table for the '", colnames(i)[2], "' variable."))
})
```
Run Code Online (Sandbox Code Playgroud)
处理所有内容data.tables并将它们包含在文档中,我得到了相当基本的粗略输出,如下面的屏幕截图所示。
此外,如果我只是将data.tables 的列表传递给kable这样
```{r}
kable(list.of.dts)
```
Run Code Online (Sandbox Code Playgroud)
我得到了所有具有更好格式的表(尽管不是第一个示例中的表),但是彼此堆叠,位于页面中间,并且不能添加标题:
有谁知道为什么会这样,我该如何克服这个问题?
编辑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
```
Run Code Online (Sandbox Code Playgroud)
如果我不将输出保存到新对象然后返回它,那么我将得到一个空白文档。上面的作品(请参见下面的截图)。唯一的问题是,我看到表之间的列表组件的名称以及这些表的标题在页面中间对齐:
编辑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.")))
}
```
Run Code Online (Sandbox Code Playgroud)
唯一剩下的问题是表格仍位于页面中心。
编辑3
最后一个问题(见上文)是将表格及其标题向左对齐。user20650提出了适用于字幕的建议。找到此电子邮件线程之后,我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}
---
Run Code Online (Sandbox Code Playgroud)
header-includes:(加载caption程序包并定义阳离子的设置)的前两行将标题的位置固定在左侧。最后一行加载floatrow包装并固定边距。
案件结案。