r - 将字符元素传递给 render() 以创建几个不同的 PDF
问题描述
我尝试使用 Markdown 创建许多看起来相同但使用不同数据的 PDF。为此,我创建了一些代码来生成随机数据,这些数据应该用于创建 PDF 文件。
library(tidyverse)
r_sample <- seq(1, 5, by = 0.1)
nr_rows <- 10
df_names <- vector()
for(i in 1:2){
name <- paste0("i_",i)
i_sample <- tibble("Name" = paste0("i_", seq(1:nr_rows)))
i_sample <- i_sample %>% add_column(sample(r_sample, nr_rows, replace = TRUE)) %>%
rename("Value" = "sample(r_sample, nr_rows, replace = TRUE)")
assign(name, i_sample)
df_names[i] <- name
}
Markdown-Script 几乎是空的,因为它只是用于测试目的。
---
title: "Test"
output: pdf_document
params:
data : ""
---
This is just a Test.
```{r echo = FALSE}
params$data
```. #error made intentionally!
现在我尝试使用render()
. 因为我想循环不同的数据帧,所以我写了一个简单的循环。
for(i in 1:2){
rmarkdown::render('Test.Rmd', params = list(data = df_names[i]),
output_file = glue::glue(paste0("file_", df_names[i], ".pdf")))
}
现在来解决问题。Markdown 将输入理解env_names[i]
为字符而不是数据框。但是,如果我像这样手动输入:
rmarkdown::render('Test.Rmd', params = list(data = i_1), output_file = glue::glue(paste0("file_i_1.pdf")))
有用。我理解这个问题,但我找不到解决这个问题的方法。
如果有人可以提供帮助,我将非常高兴!提前致谢。
解决方案
手头问题的直接解决方法是换df_names[i]
行get()
以访问名称匹配的对象,df_names[i]
而不是传递df_names[i]
to的值render()
:
rmarkdown::render('Test.Rmd', params = list(data = get(df_names[i])),
output_file = glue::glue(paste0("file_", df_names[i], ".pdf")))
然而,在全局环境中动态创建对象assign
在 R 中是相当单一的——不这样做也消除了get()
事后使用的需要。
因此,我建议将问题中的代码片段编写如下:
r_sample <- seq(1, 5, by = 0.1)
nr_rows <- 10
df_list <- list()
for(i in 1:2){
df_list[[i]] <- tibble(Name = paste0("i_", seq(1:nr_rows)), Value = sample(r_sample, nr_rows, replace = TRUE))
}
然后,循环渲染文档变为:
for(i in 1:2){
rmarkdown::render('Test.Rmd', params = list(data = df_list[[i]]),
output_file = paste0("file_i_", i, ".pdf"))
}
推荐阅读
- scala - 关于点菜数据类型的问题
- kubernetes - Kubernetes pod 处于未激活状态
- r - 如何使用变量动态选择数据框的子集
- ajax - 在 Laravel 5.8 中将每个 Ajax 的数据发送到控制器
- c# - 如何编写异步和阻塞方法
- google-cloud-platform - 如何使 Google Cloud SQL Instance PCI 兼容?
- c# - 究竟什么是“inputRadius”参数,我该如何选择?
- python-2.7 - 不知道为什么我的电子邮件脚本没有发送电子邮件
- javascript - 如何在第二次点击时恢复样式?
- python - 如何删除 s3 存储桶中可用的文件