RMarkdown 中的参数化报告 - 如何要求一次参数?

Posted

技术标签:

【中文标题】RMarkdown 中的参数化报告 - 如何要求一次参数?【英文标题】:Parameterized reports in RMarkdown - How to ask for parameters once? 【发布时间】:2018-04-20 16:25:52 【问题描述】:

我目前正在尝试利用参数化报告来允许用户输入数据集(以及更多感兴趣的变量),然后将其输入到 R 脚本中,该脚本执行和输出各种分析。这些数据集将包含多个主题的信息,目标是为数据集中的每个主题生成一份报告。因此,我使用了一个循环遍历数据集中的用户名的 for 循环(称为 map)。然后我输入一个负责大部分分析的 .Rmd 文件。 for 循环本质上是为 50 个左右的主题引用这个 .Rmd 文件,并输出 50 个左右的报告。

for (id in unique(map$UserName))

#一堆代码进行处理

render(input = "../lib/scripthtml.Rmd",output_file = paste0('report.', id, '.html'),"html_document", output_dir = "Script_output", params = "ask")

我目前正在尝试使用 Shiny 中的参数化报告来允许用户输入他们自己的数据集(地图)。因此,我指定了一个参数并在渲染步骤中使用了 params = ask。主要问题在这里:

由于渲染步骤在 for 循环下,它基本上是针对每个主题运行的。结果,params ask 界面加载了 50 次,每次都要求用户提供他们的数据集。

无论如何我可以避免这种情况吗?如何让用户提供他们的数据集文件作为参数,然后将其用于所有 50 个报告?

【问题讨论】:

【参考方案1】:

您的所有变量都可以在您的render 命令中传递,我目前为数千个报告执行此操作。

.Rmd 模板的 YAML

这可能包括某些参数的默认值,具体取决于您的要求,出于说明目的,我在此处将它们保留为空字符串。

---
params:
  var1: ""
  var2: ""
  var3: ""
---

加载数据集

在 Shiny 中,您可以将文件输入一次并重复用于每个报告。将数据框的元素传递给下一节中的render 命令。

for循环中渲染的伪代码

for (i in 1:n) 

  rmarkdown::render(
    "template.Rmd",
    params = list(
      var1 = df$var1[i],
      var2 = df$var2[i],
      var3 = df$var3[i]
    ),
    output_file = out_file
  )


注意:在闪亮的应用程序中,您需要使用 df()$var1 假设文件输入将成为反应函数。

然后,您可以使用 params$var1 约定在整个模板中使用参数。

【讨论】:

谢谢!为了澄清一下,对于 Shiny 中的一次文件输入,我是否只需使用诸如 fileInput 之类的命令来加载文件? 是的,但是,我假设您需要以某种方式操作或测试输入。 ui.R 中的fileInputserver.R 中的reactive

以上是关于RMarkdown 中的参数化报告 - 如何要求一次参数?的主要内容,如果未能解决你的问题,请参考以下文章

调整 Shiny RMarkdown 报告中的大图大小

更改 rmarkdown 生成的 PDF 中的字体

RMarkdown:如何将参数传递给在 R 中定义为变量的 bash 块?

pytest中的关联参数化日志及测试报告

我们可以为 rmarkdown 的 yaml 标头中的 biblio-style 参数设置哪些选项?

如何在rmarkdown中调整注视表的字体大小?