在rmarkdown参数中传递函数以在html报告中呈现图

时间:2017-04-28 10:16:30

标签: r r-markdown shiny

我将从闪亮生成的图表传递到rmarkdown以生成html报告。问题是wordcloud和饼图在rmarkdown文档的 params 中被接受。

问题:如何通过闪亮传递渲染的html中的wordcloud和饼图?

abc.Rmd

title: "Report using R Markdown"
subtitle: "ABC "
author: "Author name"
output:
     prettydoc::html_pretty:
     theme: architect
params:
    wc : 'NULL'
    table: 'NULL'
    pie: 'NULL'

app.R (片断)

rmarkdown::render(input = "report.Rmd",
                  output_file = "report.html",
                  params = list(wc=getWordcloud(),
                                table=getTab(),
                                pie=getPie()))

注意:getWordcloud(),getTab(),getPie()函数在闪亮的app中完美地返回。

1 个答案:

答案 0 :(得分:1)

您不能将参数类型作为函数。

参见参数类型: http://rmarkdown.rstudio.com/developer_parameterized_reports.html

支持yaml::yaml.load函数可以解析的所有标准R类型,包括characterintegernumericlogical。< / p>

我强烈建议找到一种方法使代码工作,而无需在参数中传递函数。也许你可以传递函数的选项并在rmd中包含函数?

但是,有办法绕过这个:

一种是在参数中使用函数的名称作为字符串,并使用eval()将字符串作为代码进行评估。

<强> abc.Rmd

title: "Report using R Markdown"
subtitle: "ABC "
author: "Author name"
output:
     prettydoc::html_pretty:
     theme: architect
params:
    wc : wc_function
    table: table_function
    pie: pie_function


 eval(paste0(param$wc_function, "(", my_options_as_string, ")")) 

<强> app.R(片断)

rmarkdown::render(input = "report.Rmd",
                  output_file = "report.html",
                  params = list(wc="getWordcloud",
                                table="getTab",
                                pie="getPie"))

另一个是另外一个带有函数的r脚本,在source的rmarkdown中调用。

这样,您可以将文件的路径作为参数传递,它允许您在rmarkdown中访问您的函数(但它意味着函数的名称是固定的)