我的数据文件包含一长串 case ,每个 case 一行.我想制作一份长PDF报告,每个 case 包含一页,每个页面包含相同的表格和图表,但针对不同的 case .

我知道我应该有一个" children "标记(一页),例如,childfile.Rmd:

---
title: "case number `r params$case[1]`"
output: pdf_document
params:
    case: [0,0,0,0,0,0,0]
---

```{r part1, echo=FALSE}
params$case[2:4]
```


```{r part2, echo=FALSE}
params$case[5:7]
```

并使用"父"标记中的循环进行渲染,例如,parentfile.Rmd:

---
title: "all cases"
output: pdf_document
---

```{r parent, include=FALSE}

df = data.frame(number = c(1,2,3,4),
               var1   = c(1,2,3,4),
               var2   = c(1,2,3,4),
               var3   = c(1,2,3,4),
               var4   = c(1,2,3,4),
               var5   = c(1,2,3,4),
               var6   = c(1,2,3,4)               )

for ( i in 1:4 ){
  rmarkdown::render("childfile.Rmd", 
                    params = list(case = as.vector(df[i,])))
}
```

但是,这会导致父级pdf为空,而chid为第二个pdf,仅包含最后一个 case .

如何将整套子PDF呈现为一个PDF?

推荐答案

我认为这里有两个困难.首先,rmarkdown::render()将自行编译该文件;要在父文档中编译子文档,knitr::knit_child()将起到作用.在下面的示例中,我使用了this answer中描述的技术将适当的 case 输入到子代的每个迭代中:使用变量而不是参数.

第二,据我所知,LaTeX文档只能有一个标题.因此,我们不能给每个子文档赋予自己的标题;但我们可以给每一个标题(如果您愿意,可以轻松定制其样式).

Child document

请注意,子文档不是一个独立的标记文件;对于我们要渲染的material 来说,这已经足够了.我们引用的不是一个名为case的参数,而是一个同名的变量.

# case `r unname(unlist(case[1]))`

```{r}
case[2:4]
```


```{r}
case[5:7]
```

\pagebreak

Parent document

循环遍历df的前四行.对于每一行,它设置变量case(子文档将需要该变量),然后使用knitr::knit_child()处理子文档.我们用cat()将knit输出发送回父文档;还请注意,此块至关重要地设置了results='asis'选项.

---
title: "all cases"
output: pdf_document
---

```{r setup, include=FALSE, echo=FALSE}
df = data.frame(number = c(1,2,3,4),
                var1   = c(1,2,3,4),
                var2   = c(1,2,3,4),
                var3   = c(1,2,3,4),
                var4   = c(1,2,3,4),
                var5   = c(1,2,3,4),
                var6   = c(1,2,3,4))
knitr::opts_chunk$set(echo=FALSE)
```

```{r parent, results='asis'}
for(i in 1:4) {
  case = df[i,]
  cat(knitr::knit_child("childfile.Rmd", envir = environment(), quiet = T))
  cat("\n")
}
```

R相关问答推荐

混淆矩阵,其中每列和等于1

跨列应用多个摘要函数:summerise_all:列表对象无法强制为double类型'

使用lapply的重新定位功能

编码变量a、b、c以匹配来自另一个数据点的变量x

MCMC和零事件二元逻辑回归

gt()从gt为相同内容的单元格 colored颜色 不同?

如何直接从Fortran到R的数组大小?

在R中为马赛克图中的每个字段着色

如何在ggplot图中找到第二轴的比例

如何在所有绘图中保持条件值的 colored颜色 相同?

我正在努力用R计算数据集中的中值逐步距离

如何对2个列表元素的所有组合进行操作?

迭代到DataFrame列并获得成对的值列表(col1->;col2、col2->;col3、col3->;col4等)的正确方法.

使用带有OR条件的grepl过滤字符串

使用for循环和粘贴创建多个变量

R中边际效应包中Logistic回归的交互作用风险比

如果COLSUM为>;0,则COLNAME为向量

使用shiny 中的所选要素行下拉菜单

使用ifElse语句在ggploy中设置aes y值

如何用不同长度的向量填充列表?