【发布时间】:2020-03-14 03:18:38
【问题描述】:
我正在使用 R / Rmarkdown / knitr 通过 render() 生成多个报告(pdf),但报告的内容/长度会根据底层数据的某些特征而有所不同。
例如,假设我有 10 个不同的数据集,每个数据集包含 50 个变量,并且我正在检查数据中所有 50 个变量的相关矩阵。我想为每个数据集生成一个报告,该报告为每个相关性大于 0.5 的变量对和相关性小于 -0.5 的每个变量对都有一个新页面。满足这些阈值的相关性数量将因数据集而异,因此报告长度/页数将因数据集而异。
我学会了使用 {asis, echo = somecondition, eval = somecondition} 来评估是否需要包含整个部分(例如,当没有小于 -0.5 的负相关时)。我还看到solutions utilizing 'for' loops 报告中可能存在可变长度参数,但这些解决方案不包括在新页面上打印每个结果。我还想在报告相关性的每个页面上包含部分标题。
对我来说,困难在于我能想到的任何解决方案都需要将文本块和 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 r-markdown knitr