首页 > 解决方案 > 将特定文件名分配给 rmarkdown 中的不同输出文件集

问题描述

我正在创建一组 PDF,每个都包含不同的信息。我想根据将接收信息的人来命名文件。我正在使用for循环来运行它:

 for (i in 1:nrow(files)){
   rmarkdown::render(input = "files_script.Rmd",
                     output_format = "pdf_document",
                     output_file = paste("Information_", i, ".pdf", sep=''),
                     output_dir = "directoryname/")
 }

该脚本工作得很好,但输出文件在我的目录中只是编号。我想根据我的数据框列中的名称来命名它们。

我的数据如下所示:

 Feedback Name    Surname
  xyz      John     Smith
  abc      Karen    Jones

我想按姓氏命名文件。

标签: rr-markdown

解决方案


所以你的名字在 data.frame 的两列中(我在这里称之为 df )。您可以for像这样使用循环:

for (name in paste0(df$Name, "_", df$Surname)) {
  rmarkdown::render(input = "files_script.Rmd",
                    output_format = "pdf_document",
                    output_file = paste0("Information_", name, ".pdf"),
                    output_dir = "directoryname/")
}

我替换paste(sep = "")为,paste0()因为它正在做同样的事情。

不知道为什么你会那样做。files_script.Rmd 始终是同一个文件。所以渲染一次然后更改名称会更快。

更新

既然您说要保留ias for 循环变量,那么您可以这样做:

names <- paste0(df$Name, "_", df$Surname)
for (i in seq_along(names)) {
  rmarkdown::render(input = "files_script.Rmd",
                    output_format = "pdf_document",
                    output_file = paste0("Information_", names[i], ".pdf"),
                    output_dir = "directoryname/")
}

seq_along在这种情况下是一种更安全的方法1:length(names)见this


推荐阅读