【发布时间】:2017-07-18 02:53:05
【问题描述】:
我正在尝试创建多个 Rmarkdown 文档(即字母),这些文档包含所有相同的文本,但发给不同的人,并且每个人都有一些独特的文本。我一直在采取与此处列出的方法类似的方法:
http://rmarkdown.rstudio.com/articles_mail_merge.html
基本上,我有一个创建 Rmarkdown pdf 的 R 脚本:
## Packages
library(knitr)
library(rmarkdown)
## Data
personalized_info <- read.csv(file = "meeting_times.csv")
## Loop
for (i in 1:nrow(personalized_info)){
rmarkdown::render(input = "mail_merge_handout.Rmd",
output_format = "pdf_document",
output_file = paste("handout_", i, ".pdf", sep=''),
output_dir = "handouts/")
}
和一个 .Rmd 文件来填写下面的文本:
---
output: pdf_document
---
```{r echo=FALSE}
personalized_info <- read.csv("meeting_times.csv", stringsAsFactors = FALSE)
name <- personalized_info$name[i]
time <- personalized_info$meeting_time[i]
```
Dear `r name`,
Your meeting time is `r time`.
See you then!
当我运行上述 R 脚本时,我得到一个名为“handouts”的文件夹,其中包含名为“handout_1”、“handout_2”等的文件。我希望这些文件以数据集中的人命名,并这样做我在代码的循环标题下将“i”更改为“name”。这会生成名为“handout_Ezra Zanders”的文件,但文件名与 Rmarkdown pdf 中的人名相差不大。
有谁知道脚本循环部分中的解决方案,或者其他方法?
【问题讨论】:
-
看起来您依赖于全局环境中的迭代器 (
i) 的值。更安全的是使用参数化报告,请参见此处:rmarkdown.rstudio.com/developer_parameterized_reports.html。也许这会解决你的问题。
标签: r for-loop knitr r-markdown