首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >循环R标记文件的YAML头参数中的变量,并为每个变量自动输出PDF

循环R标记文件的YAML头参数中的变量,并为每个变量自动输出PDF
EN

Stack Overflow用户
提问于 2021-07-09 05:19:26
回答 1查看 380关注 0票数 3

我申请初级数据分析员的职位,并已认识到,我将发出大量的求职信。

为了(在某种程度上)减轻这将带来的痛苦和痛苦,我想自动化求职信中适合自动化的部分,并使用automation来(希望)实现这一点。

为了这个问题的目的,让我们假设,我想要自动化的部分是申请的职位和公司想要雇用的人为该职位,将使用在首页的求职信。

在我的脑海中,这些是我想象中的步骤:

  • 在Excel电子表格中收集感兴趣的职位和相应的公司。这会给出带有变量positioncompany的两列的Excel表,并将该Excel文件作为数据框架/tibble(让我们在.Rmd文件的YAML头中调用这个的两个参数,如下所示:

)。

代码语言:javascript
复制
---
output: pdf_document
params:
 position: jobs$position[i]
 company: jobs$company[i]
---

然后,求职信的标题将如下所示:

“在r params$position r params$company”申请职位

总结:为了不需要手动更改每封求职信的参数值,我希望读取一个带有职位标题和公司名称的Excel文件,在YAML标题中循环这些参数,然后让R Markdown输出每一对职位和公司的PDF (理想情况下,每个PDF的名称包括职位标题和公司名称,以便在发送信函时更容易识别)。这有可能吗?(注意:职位名称和公司名称不一定要存储在Excel文件中,我就是这样收集的。)

希望以上所述说明我正在努力实现的目标。

任何在正确方向上的轻推都是非常感谢的!

编辑(2021年7月11日):

我已经部分地找到了这个问题的答案。

诀窍是定义一个包含rmarkdown::render函数的函数。然后,该函数可以包含在嵌套的for-loop中,以生成所需的PDF文件。

同样,假设我想使职位和公司自动化,我将呈现函数定义为:(在一个独立于"main“.Rmd文件的脚本中,其中包含名为"loop_test.Rmd”的文本):

代码语言:javascript
复制
render_function <- function(position, company){
  rmarkdown::render( 
    # Name of the 'main' .Rmd file
    'loop_test.Rmd',
    # What should the output PDF files be called?
    output_file = paste0(position, '-', company, '.pdf'),
    # Define the parameters that are used in the 'main' .Rmd file
    params = list(position = position, company = company),
    evir = parent.frame()
  )
}

然后,在for-loop中使用该函数:

代码语言:javascript
复制
for (position in positions$position) {
  for (company in positions$company) {
    render_function(position, company)
  }
}

其中,包含相关位置的Excel文件名为positions,其中包含两个名为positioncompany的变量。

我分别对一个职位和一个公司(“公司1”、“公司2”和“公司3”和“位置1”、“位置2”和“位置3")使用3种”观察“测试了这种方法。上述方法的一个问题是,它生成3^2 =9报告。例如,位置1用于公司1、公司2和公司3的字母中。我显然只想匹配公司1和位置1的输出。有人知道如何实现这一点吗?对于只有三个观察结果的两个变量,这是相当没有问题的,但是我的意图是使用几个额外的参数。不幸的是,公司的数量(即“观察”)也很可能在我结束我的搜索之前非常多.比如说,有了5-6个参数和20家公司,报告输出的数量显然会变得荒唐可笑。

如前所述,我已经快到了,但任何正确的方向,如何限制产量只与该公司的职位“匹配”将是非常感谢的。

EN

回答 1

Stack Overflow用户

发布于 2021-07-25 02:22:24

您可以按行迭代,如下所示。

代码语言:javascript
复制
for(i in 1:nrow(positions)) {
  render_function(positions$position[i], positions$company[i])
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68311630

复制
相关文章

相似问题

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