我目前正试图利用参数化报告,允许用户输入数据集(以及更多感兴趣的变量),然后将其输入到执行和输出各种分析的R脚本中。这些数据集将包含多个受试者的信息,目标是为数据集中的每个受试者生成一份报告。因此,我使用了一个for循环,该循环遍历数据集中的用户名(称为map)。然后我输入一个.Rmd文件,该文件负责大部分分析。for循环本质上是指50个左右受试者的.Rmd文件,并输出50个左右的报告。
for(id in unique(map$UserName)){
用于处理的
#
代码束render(input="../lib/scripthtml.Rmd",output_file=paste0("报告",id,'.html'),"html_document",output_dir="Script_output",params="ask")}
我目前正在尝试使用Shiny中的参数化报告,以允许用户输入自己的数据集(地图)。因此,我指定了一个参数,并在渲染步骤中使用params=ask。主要问题在于:
由于渲染步骤在for循环下,因此它基本上是为每个主题运行的。因此,params-ask接口加载了50次,每次都要求用户提供他们的数据集。
我能避免这种情况吗?我如何让用户提供他们的数据集文件作为参数,然后将其用于所有50个报告?
您的所有变量都可能在render
命令中传递,我目前为数千个报告执行此操作。
.Rmd模板的YAML
根据您的要求,这可能包括某些参数的默认值,为了便于说明,我在此处将它们保留为空字符串。
---
params:
var1: ""
var2: ""
var3: ""
---
正在加载数据集
在shine中,您可以对每个报告输入一次文件并重复使用。将数据帧的元素传递给下一节中的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
约定在整个模板中使用这些参数。