2017-07-18 126 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!