RMarkdown中的参数化报告 - 如何一次询问参数?

时间:2017-11-08 05:09:10

标签: r shiny r-markdown

我目前正在尝试利用参数化报告来允许用户输入数据集(以及一些感兴趣的变量),然后将其输入到执行和输出各种分析的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要求界面加载50次,要求用户每次都提供他们的数据集。

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

1 个答案:

答案 0 :(得分:2)

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

.Rmd模板的YAML

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

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

正在加载数据集

在闪亮的情况下,您可以输入一次文件,然后重复使用每个报告。在下一节中将数据框的元素传递给render命令。

用于循环渲染的伪代码

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约定在整个模板中使用参数。