使用 tab.id 和 officedown R 包在循环中生成表
Generate tables in a loop with tab.id with officedown R package
有没有办法在循环中生成表格并设置tab.id
可以稍后cross-referenced?在循环中生成表很简单,但我不知道之后如何设置 ID 和标题。请看下面的代码。在这里,我正在迭代 R data.frames 的列表。在最后一个块中,我将 id 向量(其长度为 2)放入块选项 - tab.id 和 tab.cap。这导致生成了两个表(很好),但是如何获取块中当前处理的 data.frame 的 id?
---
output: officedown::rdocx_document
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE)
```
```{r}
library(flextable)
dfs <- list(
df1 = head(iris),
df2 = head(mtcars)
)
df_ids <- names(dfs)
```
```{r results='asis', tab.cap=paste("Result for item", df_ids), tab.id=paste0("tab_", df_ids),
tab.cap.style = "Table Caption"}
flextable(dfs[[???]]) # can current id be accessed somehow?
```
另一种选择是使用for
循环生成表格。但是之后如何设置tab.id和tab.cap呢?即使是变通解决方案也适合我。
您可以使用 knitr::opts_chunk$set()
在循环中设置这些值。在你的情况下,我可能更喜欢 set_caption
。
要在 R Markdown 文档中循环打印 flextables,请使用 flextable_to_rmd()
。参见 Looping in R Mardown documents。
---
output: officedown::rdocx_document
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE)
```
```{r}
library(flextable)
library(officer)
library(officedown)
library(magrittr)
dfs <- list(
df1 = head(iris),
df2 = head(mtcars)
)
df_ids <- names(dfs)
```
```{r results='asis'}
for(i in df_ids){
z <- flextable(dfs[[i]]) %>%
set_caption(caption = paste("Result for item", i),
style = "Table Caption",
autonum = run_autonum(seq_id = "tab", bkm = i))
flextable_to_rmd(z)
crossref_id <- sprintf("\@ref(tab:%s)", i)
cat("\n\n\nA ref to table ", crossref_id, "\n\n\n\n")
}
```
有没有办法在循环中生成表格并设置tab.id
可以稍后cross-referenced?在循环中生成表很简单,但我不知道之后如何设置 ID 和标题。请看下面的代码。在这里,我正在迭代 R data.frames 的列表。在最后一个块中,我将 id 向量(其长度为 2)放入块选项 - tab.id 和 tab.cap。这导致生成了两个表(很好),但是如何获取块中当前处理的 data.frame 的 id?
---
output: officedown::rdocx_document
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE)
```
```{r}
library(flextable)
dfs <- list(
df1 = head(iris),
df2 = head(mtcars)
)
df_ids <- names(dfs)
```
```{r results='asis', tab.cap=paste("Result for item", df_ids), tab.id=paste0("tab_", df_ids),
tab.cap.style = "Table Caption"}
flextable(dfs[[???]]) # can current id be accessed somehow?
```
另一种选择是使用for
循环生成表格。但是之后如何设置tab.id和tab.cap呢?即使是变通解决方案也适合我。
您可以使用 knitr::opts_chunk$set()
在循环中设置这些值。在你的情况下,我可能更喜欢 set_caption
。
要在 R Markdown 文档中循环打印 flextables,请使用 flextable_to_rmd()
。参见 Looping in R Mardown documents。
---
output: officedown::rdocx_document
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE)
```
```{r}
library(flextable)
library(officer)
library(officedown)
library(magrittr)
dfs <- list(
df1 = head(iris),
df2 = head(mtcars)
)
df_ids <- names(dfs)
```
```{r results='asis'}
for(i in df_ids){
z <- flextable(dfs[[i]]) %>%
set_caption(caption = paste("Result for item", i),
style = "Table Caption",
autonum = run_autonum(seq_id = "tab", bkm = i))
flextable_to_rmd(z)
crossref_id <- sprintf("\@ref(tab:%s)", i)
cat("\n\n\nA ref to table ", crossref_id, "\n\n\n\n")
}
```