在不覆盖现有对象的情况下加载具有相同变量名的不同工作区

Load different workspaces with the same variable names without overwriting existing objects

我有一个需要加载多个 .RData 文件的管道。但是,这些文件都包含相同的变量名(例如,ls() = c(df1, df2)),并且由于这些文件很大,我决定使用 mclapply(c(a.RData, b.RData, c.RData), load, .GlobalEnv, mc.cores = parallel::detectCores()) 来节省时间。但是,由于它们具有相同的名称,因此 df1 df2 将被覆盖。那么,有什么办法可以解决这个问题吗?

我在想:

  1. 我可以在加载到 R 之前更改变量名称吗? .RData来自其他人的管道,所以我现在不能让他们更改变量,所以我想知道是否有办法在 R 外部或之前更改 .RData 的变量名称加载中。

  2. 如果第一个不行,如何写一个参数检测变量是否因为重名而被覆盖,从而自动重命名变量。

加载到单独的环境:

# some script that outputs RData with x object
x <- head(mtcars)
save.image("temp.RData")

# another script with different x value
x <- 1:3

# now load our RData into new separate environment
e1 <- new.env(parent = baseenv())
load("temp.RData", envir = e1)

x
# [1] 1 2 3

e1$x
#                    mpg cyl disp  hp drat    wt  qsec vs am gear carb
# Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
# Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
# Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
# Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
# Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
# Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1