如何使我的函数(几个ggplot2图形)的输出成为html文件(显示这些图形)?

时间:2019-06-24 15:05:06

标签: r ggplot2 r-markdown

我正在编写一个用于培训/测试模型的个人使用包,最后对它们进行无数的LIMEDALEX解释。我将它们另存为自己的ggplot2对象(例如lime_plot_1),并在函数结束时将它们全部返回到全局环境。

但是,我想发生的事情是,在该函数的结尾,我不仅将这些图形放在环境中,而且还将呈现一个小的html报告-包含所有已创建的图形。

我想指出的是,尽管我确实知道可以通过简单地使用Rmarkdown或Rnotebook中的函数来做到这一点,但我希望避免这种情况,因为我计划将其用作.R脚本来简化整个过程。进程(因为我将以一定的频率运行它),并且根据我的经验,在.Rmd中运行大块代码往往会使R崩溃。

理想情况下,我会有这样的东西:

s_plot <- function(...){

 1. constructs LIME explanations
 2. constructs DALEX explanations
 3. saves explanations as ggplot2 objects, and list them under graphs_list

 4. render graphs_list as an html file
}

1、2和3都可以工作,但是我还没有找到解决4.的方法,这不包括在.Rmd文件中进行整个过程。

编辑:感谢@Richard Telford和@Axeman的评论,我弄清楚了。下面是函数:

s_render <- function(graphs_list = graphs_list, meta = NULL, cacheable = NA){

    currentDate <- Sys.Date()

    rmd_file <- paste("/path/to/folder",currentDate,"/report.Rmd", sep="")

    file.create(rmd_file)

    graphs_list <- c(roc_plot, prc_plot, mp_boxplot, vi_plot, corr_plot)

    c(Yaml file headers here, just like in a regular .Rmd) %>% write_lines(rmd_file)
    rmarkdown::render(rmd_file,
            params = list(
                    output_file = html_document(),
                    output_dir = rmd_file))}

1 个答案:

答案 0 :(得分:2)

首先,创建一个简单的Rmarkdown文件,该文件带有一个参数。该文件的唯一目的是创建报告。例如,您可以传递文件名:

---
title: "test"
author: "Axeman"
date: "24/06/2019"
output: html_document
params:
  file: 'test.RDS'
---

```{r}
plot_list <- readRDS(params$file)
lapply(plot_list, print)
```

我将此另存为test.Rmd

然后在主脚本中,将绘图列表写入磁盘上的临时文件,并将文件名传递给减价报告:

library(ggplot2)
plot_list <- list(
  qplot(1:10, 1:10),
  qplot(1:10)
)

file <- tempfile()
saveRDS(plot_list, file)
rmarkdown::render('test.Rmd', params = list(file = file))

包含绘图的.html文件现在位于磁盘上:

enter image description here