r语言 - 在函数中使用绘图调用而不对其进行计算



在 Rmarkdown 文档中,我想通过在尚未构建和保存地块时才构建地块来加速编织过程。

我使用下面的代码和一个简单的示例来做到这一点。

x = rnorm(10)
if (! "figurename" %in% dir("figure")) {
png("figure/figurename.png")
hist(x)
dev.off()
} 

现在我想做一个函数,它自动执行上述命令,并用绘图调用作为输入。此外,不应评估绘图调用(太慢!我了解了substitute命令,并写了这个:

x = rnorm(10)
plot_call = substitute(hist(x))
function(plot_call, figurename){
if (! figurename %in% dir("figure")) {
png(file.path("figure", figurename))
eval(plot_call)
dev.off()
} 
knitr::include_graphics(file.path("figure", figurename))
}

我对此有两个问题:

  • 它似乎不适用于多行绘图调用
  • 这似乎是一个可疑的黑客

你觉得怎么样?有没有更好的方法?

缓存代码块的更正式方法是利用块选项。在块标题中添加一个简单的cache = TRUE将强制每个时间块选项重新评估您的图,或者代码本身将更改:

```{r expensive_plot, cache = TRUE}
# Some expensive plot
df %>%
ggplot(aes(x, y)) +
geom_point()
```

如果每次基础数据发生更改时都需要重新计算图,则每次文件"上次编辑"字段更改时,都可以通过在选项中添加cache.extra = file.mtime('your-csv.csv')来使缓存失效。

最新更新