Загружать разные рабочие области с одинаковыми именами переменных без перезаписи существующих объектов - PullRequest
1 голос
/ 10 июля 2020

У меня есть конвейер, который требует загрузки нескольких файлов .RData. Однако все эти файлы содержат одинаковые имена переменных (скажем, ls() = c(df1, df2)), и, поскольку эти файлы большие, я решил использовать mclapply(c(a.RData, b.RData, c.RData), load, .GlobalEnv, mc.cores = parallel::detectCores()), чтобы сэкономить время. Однако, поскольку они имеют одинаковые имена, df1 df2 будет перезаписан. Итак, есть ли способ решить эту проблему?

Я подумал:

  1. Могу ли я изменить имя переменной перед загрузкой в ​​R? .RData взяты из конвейера других людей, поэтому я не могу позволить им изменить переменную сейчас, поэтому мне интересно, есть ли способ изменить имя переменной .RData перед вне R или перед загрузкой.

  2. Если первый из них невозможен, как написать аргумент, который может определить, будет ли переменная перезаписана из-за дублированного имени, и автоматически переименовать переменную.

1 Ответ

0 голосов
/ 10 июля 2020

Загрузить в отдельную среду :

# 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...