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.
我做错了什么,有效实现我想要的东西的方法是什么?
在不查看autoplot代码的情况下,这两个表达式之间的区别是print在第二种情况下发生的隐藏,因为该表达式返回由创建的对象autoplot,然后 R 核心“打印”(对于不同的对象可能意味着不同的东西)。
因此,解决方法是调用print自己:
a[, {png(paste0(id, ".png")); print(autoplot(y[[1]])); dev.off()}, by = id]
Run Code Online (Sandbox Code Playgroud)