use*_*036 10 pdf r report dynamic knitr
我想创建一个循环,它允许我自动保存从.Rmd文件生成的PDF报告.例如,如果变量"ID"有10行,我希望R自动将10个报告保存到特定目录中.这些报告应根据所选ID而有所不同.
之前的帖子(使用循环与knitr生成多个pdf报告......需要一些帮助让我超越驼峰)处理了从.Rnw文件生成的多个pdf报告的创建.我尝试按如下方式应用该方法:
#Data
```{r, include=FALSE}
set.seed(500)
Score <- rnorm(40, 100, 15)
Criteria1<-rnorm(40, 10, 5)
Criteria2<-rnorm(40, 20, 5)
ID <- sample(1:1000,8,replace=T)
df <- data.frame(ID,Score,Criteria1,Criteria2)
#instead of manually choosing the ID:
subgroup<- subset(df, ID==1)
# I would like to subset the Data through a loop. My approach was like like this:
for (id in unique(df$ID)){
subgroup<- df[df$ID == id,]}
```
```{r, echo=FALSE}
#Report Analysis
summary(subgroup)
```
#Here will be some text about the summary.
# At the end the goal is to produce automatic pdf reports with the ID name as a filename:
library("rmarkdown")
render("Automated_Report.rmd",output_file = paste('report.', id, '.pdf', sep=''))
Run Code Online (Sandbox Code Playgroud)
Gre*_*gor 13
调整你的例子:
你需要一个.rmd"模板"文件.它可能是这样的,保存为template.rmd.
This is a subgroup report.
```{r, echo=FALSE}
#Report Analysis
summary(subgroup)
```
Run Code Online (Sandbox Code Playgroud)
然后,您需要一个R脚本来加载您想要的数据,循环遍历数据子集以及每个子集
subgroup模板中使用的对象所以,在这个单独的脚本中:
# load data
set.seed(500)
Score <- rnorm(40, 100, 15)
Criteria1<-rnorm(40, 10, 5)
Criteria2<-rnorm(40, 20, 5)
ID <- sample(1:1000,8,replace=T)
df <- data.frame(ID,Score,Criteria1,Criteria2)
library("rmarkdown")
# in a single for loop
# 1. define subgroup
# 2. render output
for (id in unique(df$ID)){
subgroup <- df[df$ID == id,]
render("template.rmd",output_file = paste0('report.', id, '.html'))
}
Run Code Online (Sandbox Code Playgroud)
这在我的工作目录中生成了8个html文件,每个文件都包含不同数据子集的摘要.
请注意,如果您尝试单击RStudio中的"编织"按钮,这将无效,因为它在单独的R会话中运行R代码.但是,当您从控制台显式使用render(或knit2pdf)rmd文件中的R代码仍然可以访问全局环境时.
实现此目标的另一种选择是使用该brew包.
| 归档时间: |
|
| 查看次数: |
3328 次 |
| 最近记录: |