我目前正在尝试利用参数化报告来允许用户输入数据集(以及一些感兴趣的变量),然后将其输入到执行和输出各种分析的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个报告?
答案 0 :(得分:2)
您的所有变量都可以在render
命令中传递,我目前为成千上万的报告执行此操作。
这可能包括某些参数的默认值,具体取决于您的要求,为了说明的目的,我在这里将它们留作空字符串。
---
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
约定在整个模板中使用参数。