【问题标题】:Parameterized reports in RMarkdown - How to ask for parameters once?RMarkdown 中的参数化报告 - 如何要求一次参数?
【发布时间】: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 个报告?

【问题讨论】:

    标签: r shiny r-markdown


    【解决方案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
    猜你喜欢
    • 1970-01-01
    • 2016-08-24
    • 1970-01-01
    • 1970-01-01
    • 2019-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-17
    相关资源
    最近更新 更多