在一个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')
到你的选择。