2017-07-18 82 views
0

我正在尝试创建包含所有相同文本但发给不同人并为每个人具有一些独特文本的多个Rmarkdown文档(即字母)。我一直在采取类似的办法作为一个在这了:命名迭代Rmarkdown文档

http://rmarkdown.rstudio.com/articles_mail_merge.html

基本上,我有一个创建的PDF文件Rmarkdown的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脚本,我得到一个名为“讲义”,以文件名为“handout_1”,“handout_2”等文件夹,我想在F iles以数据集中的人名命名,为此,我在代码的循环标题下将“i”更改为“name”。这会生成名为“handout_Ezra Zanders”的文件,但文件名称与Rmarkdown pdf中的人员名称不大相同。

任何人都知道在脚本的循环部分的解决方案,或者这样做的另一种方式?

+1

看起来你是依靠迭代器的值( '我')在全球环境中。更安全的是使用参数化报告,请参阅:http://rmarkdown.rstudio.com/developer_parameterized_reports.html。也许这会解决你的问题。 –

回答

0

您需要在您的i循环中添加名称。顺便说一下,因为您正在使用外部脚本来运行markdown,所以不必在mardown中再次读取csv文件。

创建的PDF文件Rmarkdown将R脚本:

## Packages 
library(knitr) 
library(rmarkdown) 

## Data 
personalized_info <- read.csv(file = "meeting_times.csv") 

## Loop 
for (i in 1:nrow(personalized_info)) { 
    name <- personalized_info$name[i] 
    time <- personalized_info$meeting_time[i] 
    rmarkdown::render(input = "mail_merge_handout.Rmd", 
    output_format = "pdf_document", 
    output_file = paste("handout_", name, ".pdf", sep=''), 
    output_dir = "handouts/") 
} 

和.Rmd文件填写在下面的文本:

--- 
output: pdf_document 
--- 

Dear `r name`, 

Your meeting time is `r time`. 

See you then!