在函数中使用绘图调用,而不对其进行评估。

问题描述 投票:0回答:1

在一个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))
}

我有两个问题。

  • 它似乎不能与多行绘图调用一起工作。
  • 似是而非

你觉得呢?有什么更好的方法吗?

r function plot r-markdown
1个回答
0
投票

缓存代码块的一个更正式的方法是利用 分块期权. 增加一个简单的 cache = TRUE 到块头,将迫使你的情节每次块选项或代码本身改变时都要重新评估。

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

如果每次底层数据发生变化时都需要重新计算绘图,那么可以在文件 "最后编辑 "字段发生变化时,通过添加 "最后编辑 "字段来使缓存无效。cache.extra = file.mtime('your-csv.csv') 到你的选择。

© www.soinside.com 2019 - 2024. All rights reserved.