我正在编写一个用于培训/测试模型的个人使用包,最后对它们进行无数的LIME
和DALEX
解释。我将它们另存为自己的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))}
答案 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文件现在位于磁盘上: