提问人:panman 提问时间:4/25/2018 最后编辑:panman 更新时间:7/13/2020 访问量:6667
rmarkdown 将 kable 与 data.tables 列表一起使用会丢失表格格式
rmarkdown using kable with list of data.tables loses table formatting
问:
我有一个文档,我想使用列表并将它们包含在 PDF/HTML/MS Word 文档中。列表的每个组件都包含一个 .rmarkdown
data.table
data.table
我试图实现的是用于在带有标题的文档中添加所有表格。kable
当我像这样一一索引 s 时data.table
```{r}
kable(list.of.dts[[1]], caption = paste0("Frequency table for the '", colnames(list.of.dts[[1]])[2], "' variable."))
```
一切都很好,表格的格式很好,如下面的屏幕截图所示。
但是,如果我尝试像这样使用列表中的所有内容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."))
})
```
要处理所有并将它们包含在文档中,我得到了非常基本和粗略的输出,如下面的屏幕截图所示。data.tables
此外,如果我只是将 s 列表传递给这样data.table
kable
```{r}
kable(list.of.dts)
```
我得到的所有表格都具有更好的格式(尽管不像第一个示例中那样),但堆叠在一起,居中位于页面中间,我无法添加标题:
有谁知道为什么会发生这种情况,我该如何克服这个问题?
编辑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
```
如果我不将输出保存到新对象,然后返回它,那么我会得到一个空白文档。以上工作原理(见下面的屏幕截图)。唯一的问题是,我看到列表组件的名称在表格和表格之间,并且它们的标题在页面中间对齐:
编辑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.")))
}
```
唯一剩下的问题是表格仍然在页面中居中。
编辑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}
---
(加载包并定义阳离子的设置)的前两行将字幕的位置固定在左侧。最后一行加载包并固定边距。header-includes:
caption
floatrow
案件已结案。
答: 暂无答案
评论