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

时间:2018-05-04 19:10:07

标签: 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]

但它会创建空白画布。

但是,以下代码有效:

png("1.png")
a[1, autoplot(y[[1]])]
dev.off()

这让我觉得它与{}中的命令链接有关。下一个代码也有效(因为plot不适用于预测对象,我正在绘制x变量:

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

这让我想起了autoplot

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

1 个答案:

答案 0 :(得分:3)

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

因此修复是在自己调用print

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