列表中每个元素的 Knitr / kable 标题
Knitr / kable captions for each elements of a list
我目前必须使用 R Markdown
创建一个 .pdf
文档。我正在使用 knitr
包来 "convert" 我的数据帧到 LaTeX。我通常这样做没有问题,但这次我不太确定如何解决我的问题。
我需要获取列表中每个元素(一些数据帧)的标题,以便在 .pdf
文件中显示为标题。
这是我的数据示例:
library(knitr)
library(kableExtra)
df1 <- data.frame(col1 = c(1,2,3), col2 = c("a", "b", "c"))
df2 <- data.frame(col1 = c(6,7,8), col2 = c("d", "e", "f"))
list <- list("df1" = df1, "df2" = df2)
print(list)
$`df1`
col1 col2
1 1 a
2 2 b
3 3 c
$df2
col1 col2
1 6 d
2 7 e
3 8 f
我的knitr
和kableExtra
代码:
my_function <- function(list){
kable(list, "latex", longtable = T,
caption = "df1 and df2 respectively") %>%
kable_styling(font_size = 7,
latex_options = c("repeat_header"),
full_width = F)
}
print(lapply(list, my_function))
目前,输出文档中两个 table 的标题都是 df1 and df2 respectively
,而我希望第一个 df1
和 df2
第二个等等...
我不习惯在kable()
里面list()
,因为我主要使用data.frame/data.table。我尝试使用 names()
、cat()
、... 将 caption
替换为参数,但没有得到我想要的结果。我很确定这很简单。
有人可以帮助我吗?谢谢。
您可以在 for-loop 中单独打印表格,如此处所建议:Unexpected behavior of kable when called from lapply or from function with print statement。
Rmarkdown
---
title: "List of tables"
output:
pdf_document
header-includes:
- \usepackage{longtable}
---
```{r tables, results = "asis", echo = FALSE}
library(knitr)
library(kableExtra)
## data
df1 <- data.frame(col1 = c(1,2,3), col2 = c("a", "b", "c"))
df2 <- data.frame(col1 = c(6,7,8), col2 = c("d", "e", "f"))
ls <- list(df1 = df1, df2 = df2)
## tables
for(i in seq_along(ls)) {
print(
kable(ls[[i]], format = "latex", caption = names(ls)[i], longtable = TRUE) %>%
kable_styling(font_size = 7, latex_options = "repeat_header", full_width = FALSE)
)
}
```
PDF 输出
我目前必须使用 R Markdown
创建一个 .pdf
文档。我正在使用 knitr
包来 "convert" 我的数据帧到 LaTeX。我通常这样做没有问题,但这次我不太确定如何解决我的问题。
我需要获取列表中每个元素(一些数据帧)的标题,以便在 .pdf
文件中显示为标题。
这是我的数据示例:
library(knitr)
library(kableExtra)
df1 <- data.frame(col1 = c(1,2,3), col2 = c("a", "b", "c"))
df2 <- data.frame(col1 = c(6,7,8), col2 = c("d", "e", "f"))
list <- list("df1" = df1, "df2" = df2)
print(list)
$`df1`
col1 col2
1 1 a
2 2 b
3 3 c
$df2
col1 col2
1 6 d
2 7 e
3 8 f
我的knitr
和kableExtra
代码:
my_function <- function(list){
kable(list, "latex", longtable = T,
caption = "df1 and df2 respectively") %>%
kable_styling(font_size = 7,
latex_options = c("repeat_header"),
full_width = F)
}
print(lapply(list, my_function))
目前,输出文档中两个 table 的标题都是 df1 and df2 respectively
,而我希望第一个 df1
和 df2
第二个等等...
我不习惯在kable()
里面list()
,因为我主要使用data.frame/data.table。我尝试使用 names()
、cat()
、... 将 caption
替换为参数,但没有得到我想要的结果。我很确定这很简单。
有人可以帮助我吗?谢谢。
您可以在 for-loop 中单独打印表格,如此处所建议:Unexpected behavior of kable when called from lapply or from function with print statement。
Rmarkdown
---
title: "List of tables"
output:
pdf_document
header-includes:
- \usepackage{longtable}
---
```{r tables, results = "asis", echo = FALSE}
library(knitr)
library(kableExtra)
## data
df1 <- data.frame(col1 = c(1,2,3), col2 = c("a", "b", "c"))
df2 <- data.frame(col1 = c(6,7,8), col2 = c("d", "e", "f"))
ls <- list(df1 = df1, df2 = df2)
## tables
for(i in seq_along(ls)) {
print(
kable(ls[[i]], format = "latex", caption = names(ls)[i], longtable = TRUE) %>%
kable_styling(font_size = 7, latex_options = "repeat_header", full_width = FALSE)
)
}
```