列表中每个元素的编织/有线标题

时间:2019-07-08 20:28:19

标签: r r-markdown knitr kable kableextra

我目前必须使用__exit__创建一个.pdf文档。我正在使用R Markdown包将数据帧“转换”为LaTeX。我通常没有问题,但是这次我不确定如何解决问题。

我需要获取列表中每个元素(某些数据框)的标题,以作为标题出现在knitr文件中。

以下是我拥有的数据的示例:

.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)) ,第二个为df1 and df2 respectively时,当前输出文档中两个表的标题均为df1

我不习惯df2内的list(),因为我主要使用data.frame / data.table。我尝试使用kable()caption,...将参数替换为names(),但没有得到想要的结果。我很确定这很简单。

有人可以帮助我吗?谢谢。

1 个答案:

答案 0 :(得分:1)

您可以在for循环中分别打印表格,如此处建议的那样: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输出

PDF_output