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 中的fileInput
和server.R 中的reactive
以上是关于RMarkdown 中的参数化报告 - 如何要求一次参数?的主要内容,如果未能解决你的问题,请参考以下文章
RMarkdown:如何将参数传递给在 R 中定义为变量的 bash 块?