命名迭代Rmarkdown文档

时间:2017-07-18 02:53:06

标签: r for-loop knitr r-markdown

我试图创建多个Rmarkdown文档(即字母),这些文档包含所有相同的文本,但是针对不同的人并且每个人都有一些独特的文本。我采取了类似的方法:

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

基本上,我有一个创建Rmarkdown pdfs的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脚本时,我得到一个名为&#34; handouts的文件夹,&#34;文件名为&#34; handout_1,&#34; &#34; handout_2,&#34;我希望文件以数据集中的人名命名,为此我改变了#34; i&#34; to&#34; name&#34;在代码的循环标题下。这会生成名为&#34; handout_Ezra Zanders,&#34;但文件名与Rmarkdown pdf中的人名不多。

任何人都知道脚本循环部分的解决方案,或其他方式吗?

1 个答案:

答案 0 :(得分:0)

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

创建Rmarkdown pdfs的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!