【问题标题】:Naming iterative Rmarkdown documents命名迭代 Rmarkdown 文档
【发布时间】: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 中的人名相差不大。

有谁知道脚本循环部分中的解决方案,或者其他方法?

【问题讨论】:

标签: r for-loop knitr r-markdown


【解决方案1】:

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

创建 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)) {
  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!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-04
    • 1970-01-01
    • 2018-10-18
    • 1970-01-01
    • 2018-11-29
    • 2018-11-05
    • 1970-01-01
    • 2015-03-28
    相关资源
    最近更新 更多