如何使用Rmarkdown生成可变长度报告?

如何使用Rmarkdown生成可变长度报告?,r,r-markdown,knitr,R,R Markdown,Knitr,我使用R/Rmarkdown/knitr通过render()生成多个报告(PDF),但报告的内容/长度将根据基础数据的某些特征而有所不同 例如,假设我有10个不同的数据集,每个数据集有50个变量,我正在检查数据中所有50个变量的相关矩阵。我想为每个数据集生成一个报告,其中每个变量对都有一个新页面,每个变量对的相关性大于0.5,每个变量对的相关性小于-0.5。满足这些阈值的关联数将因数据集而异,因此报告长度/页数将因数据集而异 我已经学会了使用{asis,echo=somecondition,ev

我使用R/Rmarkdown/knitr通过render()生成多个报告(PDF),但报告的内容/长度将根据基础数据的某些特征而有所不同

例如,假设我有10个不同的数据集,每个数据集有50个变量,我正在检查数据中所有50个变量的相关矩阵。我想为每个数据集生成一个报告,其中每个变量对都有一个新页面,每个变量对的相关性大于0.5,每个变量对的相关性小于-0.5。满足这些阈值的关联数将因数据集而异,因此报告长度/页数将因数据集而异

我已经学会了使用{asis,echo=somecondition,eval=somecondition}来评估是否需要包含整个部分(例如,当没有小于-0.5的负相关性时)。我还看到,在报告中可能会出现长度可变的参数,但这些解决方案不包括在新页面上打印每个结果。我还想在报告相关性的每一页上包括部分标题

对我来说,困难在于我能想到的任何解决方案都需要将文本块和r代码嵌套在彼此之间。对于我如何处理问题的一些示例Rmd代码,我尝试在一个新页面上为每个小数据集打印一个新的直方图,使用“````表示三个刻度通常在哪里,以避免弄乱示例代码的格式:

"```"{r, echo = FALSE}
datlist <- list(df1 = rnorm(100), df2 = rnorm(100), df3 = rnorm(100)) # fake data
"```"

Some Text Introducing the Report


"```"{'asis', eval = length(datlist) > 0} # evaluating if the section is to be included
"```"{r, echo = FALSE, eval = length(datlist) > 0}

for(i in 1:length(datlist)){ # starting the variable-length scope 

"```"{'asis', eval = length(datlist) > 0} # the information to be included on each new page

\newpage
\section{`r (names(datlist[i]))`}
Here is a histogram of the data found in `r (names(datlist[i]))`.
`r hist(unlist(datlist[i]))`

"```"
} # closing the for loop above
"```" 
"```"
“``{r,echo=FALSE}
datlist 0}#评估是否包含该节
“``{r,echo=FALSE,eval=length(数据列表)>0}”
对于(i in 1:length(datlist)){#开始可变长度范围
“```{asis',eval=length(datlist)>0}#每个新页面上要包含的信息
\新页
\第{`r节(名称(datlist[i])`
下面是在'r(names(datlist[i])'中找到的数据的柱状图。
`r历史(未列出(数据列表[i]))`
"```"
}#关闭上面的for循环
"```" 
"```"

欢迎提供任何帮助,包括使用完全不同方法的解决方案。

两个变量之间始终存在相关性,因此我不确定这是否是您想要的,但以下代码将显示绝对值大于0.5的所有变量对的相关性

---
title: "Untitled"
author: "Author"
date: "18 November 2019"
output: pdf_document
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```

```{r, echo = FALSE}
datlist <- data.frame(var1 = rnorm(100),
                      var2 = rnorm(100),
                      var3 = rnorm(100)) # fake data
# add some correlations
datlist$var4 <- datlist$var1*(rnorm(100,0,0.05)+1)
datlist$var5 <- datlist$var3*(rnorm(100,0,0.05)-1)
# get all correlations, there is probably an easier way of doing this...
corlist <- as.data.frame(t(combn(colnames(datlist),2)))
corlist$cor <- apply(corlist,1,function(x) {
  cor(datlist[,x[1]],datlist[,x[2]])
})
```

Some Text Introducing the Report

```{r, results='asis', echo=F}
apply(corlist[abs(corlist$cor)>0.5,],1, function(x) {
   cat('\n')  
   cat("# Correlation between ", x[1], " and ",x[2],"\n")
   cat("The correlation between both variables was ", x[3], ".\n")
})
```
---
标题:“无标题”
作者:“作者”
日期:“2019年11月18日”
输出:pdf\U文件
---
```{r设置,include=FALSE}
knitr::opts_chunk$set(echo=TRUE)
```
```{r,echo=FALSE}

谢谢你的帮助!根据你的反馈,我已经澄清了我的问题。在您的解决方案中,是否有任何方法将\newpage或\section包含在应用循环中?在使用您的示例时,我希望“var3和var5之间的相关性”从一个新页面开始。是的,只需在循环中添加
cat(“\newpage”)
。使用
#您的标题
应该已经生成一个部分,因为这是标记语法。非常感谢!不幸的是,我的报告的细节(不是真正的相关性)使得内容与分页符不一致,但是根据你的回答,我能够通过制作一个HTML文档来找到一个合理的解决方案。