我想保存使用变量
var1
定义的ggplot对象,但未保存。
var1 <- 100
datfram <- data.frame(y=rnorm(var1))
ggp1 <- ggplot(datfram) + geom_point(aes(x=1:var1, y=y))
save(ggp1, file='temp.rdata')
load(file='temp.rdata')
ggp1
如果我加载保存的数据文件,R 无法绘制对象
ggp1
,因为 var1
未知。错误信息如下所示。
Error in `geom_point()`:
! Problem while computing aesthetics.
ℹ Error occurred in the 1st layer.
Caused by error:
! object 'var1' not found
我怀疑这是由于R的延迟加载机制造成的。我也可以将
var1
保存在数据文件中,但我想知道是否有一种方法可以方便地保存 ggplot 对象,而不必担心依赖关系。
我同意@MrFlick,你应该避免使用外部变量,但如果你绝对必须,你应该确保在使用注入运算符传递给
ggplot
时对它们进行评估!!
:
library(ggplot2)
tf1 <- tempfile(fileext = ".rdata")
tf2 <- tempfile(fileext = ".rdata")
var1 <- 100
datfram <- data.frame(y = rnorm(var1))
gg_wrong <- ggplot(datfram) + geom_point(aes(x = 1:var1, y = y))
gg_good <- ggplot(datfram) + geom_point(aes(x = 1:!!var1, y = y))
save(gg_wrong, file = tf1)
save(gg_good, file = tf2)
rm(var1, gg_wrong, gg_good)
load(file = tf1)
load(file = tf2)
gg_wrong ## error
gg_good ## works