2017-07-18 1 views
0

Ich versuche, mehrere Rmarkdown-Dokumente (d. H. Buchstaben) zu erstellen, die den gleichen Text enthalten, aber an verschiedene Personen adressiert sind und für jede Person einen eindeutigen Text enthalten. Ich habe einen ähnlichen Ansatz genommen als die hier angelegt:Benennung iterativer Rmarkdown-Dokumente

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

Grundsätzlich hat ich einen R-Skript, das das Rmarkdown pdfs erstellt:

## 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/") 
} 

und eine .Rmd-Datei füllen Sie das unten im Text:

--- 
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! 

Wenn ich den oben R-Skript ausführen, erhalte ich einen Ordner mit dem Namen „Handreichungen“, mit Dateien mit dem Namen „handout_1“, „handout_2“, etc. würde mir die f gefallen Ile nach der Person im Dataset benannt werden, und dazu habe ich "i" in "name" unter der Loop-Überschrift des Codes geändert. Dies erzeugt Dateien mit dem Namen "handout_Ezra Zanders", aber der Dateiname entspricht nicht dem Namen der Person in der Rmarkdown-Datei.

Wer kennt eine Lösung dafür in der Schleife Teil des Skripts, oder eine andere Möglichkeit, dies zu tun?

+1

Sieht aus wie Sie auf dem Wert des Iterators setzen ('i') in der globalen Umgebung. Sicherer wäre es, einen parametrisierten Bericht zu verwenden, siehe hier: http://rmarkdown.rstudio.com/developer_parameterized_reports.html. Vielleicht würde das dein Problem lösen. –

Antwort

0

Sie müssen die Namen in Ihrer i Schleife hinzufügen. Da Sie ein externes Skript verwenden, um Ihren Markdown auszuführen, ist es übrigens nicht notwendig, die CSV-Datei im mardown erneut zu lesen.

Der R-Skript, das das Rmarkdown pdfs erstellt:

## 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/") 
} 

und eine .Rmd Datei im Text zu füllen:

--- 
output: pdf_document 
--- 

Dear `r name`, 

Your meeting time is `r time`. 

See you then!