首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >传递一个字符元素来呈现()来创建几个不同的PDF

传递一个字符元素来呈现()来创建几个不同的PDF
EN

Stack Overflow用户
提问于 2021-02-18 11:26:23
回答 1查看 55关注 0票数 0

我尝试用Markdown创建一些PDF,它们看起来都一样,但是使用不同的数据。为此,我创建了一些代码来生成随机数据,这些数据应该用于创建PDF。

代码语言:javascript
复制
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脚本几乎是空的,因为它只是用于测试目的。

代码语言:javascript
复制
---
title: "Test"
output: pdf_document
params: 
  data : ""
---

This is just a Test. 

```{r echo = FALSE}

params$data

代码语言:javascript
复制

现在,我尝试使用render()将R脚本中的数据输入到Markdown脚本中。因为我想循环不同的数据,所以我编写了一个简单的循环。

代码语言:javascript
复制
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]的输入理解为一个字符,而不是数据格式。但是,如果我像这样手动地键入它:

代码语言:javascript
复制
rmarkdown::render('Test.Rmd', params = list(data = i_1), output_file = glue::glue(paste0("file_i_1.pdf")))

它起作用了。我明白这个问题,但我找不到解决这个问题的办法。

如果有人能帮忙,我会很高兴的!提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-24 17:20:37

当前问题的直接修复方法是将df_names[i]包装在get()中,以便访问名称与df_names[i]匹配的对象,而不是将df_names[i]的值传递给render()

代码语言:javascript
复制
rmarkdown::render('Test.Rmd', params = list(data = get(df_names[i])), 
                    output_file = glue::glue(paste0("file_", df_names[i], ".pdf")))

然而,在全局环境中使用assign动态创建对象在R中是非常统一的--而不这样做也消除了以后使用get()的需要。

因此,我建议将问题中的代码片段编写如下:

代码语言:javascript
复制
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))
}

然后,循环呈现文档如下:

代码语言:javascript
复制
for(i in 1:2){
  rmarkdown::render('Test.Rmd', params = list(data = df_list[[i]]), 
                    output_file = paste0("file_i_", i, ".pdf"))
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66259016

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档