当在 data.table 中链接时,autoplot 将空白图保存到 png 设备

Pav*_*ive 3 r ggplot2 data.table

我有一个data.table列有一些值的预测,我想用ggplot2::autoplot.

我正在尝试这个(可重复的例子):

require(data.table)
require(forecast)
require(ggplot2)

## create data.table
a <- data.table(id = 1:2)
a[, x := .(list(sample(1:10, 5, FALSE))), by = id]
a[, y := .(list(forecast(x[[1]]))), by = id]

## plot by id:
a[, {png(paste0(id, ".png")); autoplot(y[[1]]); dev.off()}, by = id]
Run Code Online (Sandbox Code Playgroud)

但它会创建空白画布。

但是,以下代码有效:

png("1.png")
a[1, autoplot(y[[1]])]
dev.off()
Run Code Online (Sandbox Code Playgroud)

这让我认为它与{}. 下一个代码也有效(因为plot不适用于预测对象,我正在绘制x变量:

a[, {png(paste0(id, ".png")); plot([[1]]); dev.off()}, by = id]
Run Code Online (Sandbox Code Playgroud)

这让我想起autoplot.

我做错了什么,有效实现我想要的东西的方法是什么?

edd*_*ddi 5

在不查看autoplot代码的情况下,这两个表达式之间的区别是print在第二种情况下发生的隐藏,因为该表达式返回由创建的对象autoplot,然后 R 核心“打印”(对于不同的对象可能意味着不同的东西)。

因此,解决方法是调用print自己:

a[, {png(paste0(id, ".png")); print(autoplot(y[[1]])); dev.off()}, by = id]
Run Code Online (Sandbox Code Playgroud)