保存和加载使用未保存的变量定义的 ggplot 对象

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

我想保存使用变量

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 对象,而不必担心依赖关系。

r ggplot2 lazy-loading
1个回答
0
投票

我同意@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
© www.soinside.com 2019 - 2024. All rights reserved.