R - Как выполнить одну и ту же операцию с несколькими переменными
В R мне часто приходится делать одну и ту же операцию для группы переменных.
Например, в моей среде в настоящее время у меня есть следующие фреймы данных:
df_model1
df_model2
df_model3
df_model4
df_model5
и у меня есть еще один фрейм данных под названием df_obs
,
Что мне нужно сделать, это объединить каждый из df-model*
фрейм данных в df_obs
,
Обычно я делаю что-то вроде этого:
new_df_model1 <- merge(df_obs, df_model1, all=TRUE)
new_df_model2 <- merge(df_obs, df_model2, all=TRUE)
...
и так далее, что явно не очень практично.
Как я могу сделать эту операцию более программной?
2 ответа
Вы могли бы использовать Map
в merge
df_obs
и df_model
наборы данных в list
,
lst <- Map(`merge`, list(df_obs),
mget(paste0('df_model', 1:5)), MoreArgs=list(all=TRUE))
Если выходные наборы данных в списке должны быть отдельными объектами data.frame в глобальной среде, мы можем использовать list2env
(но я бы предпочел оставить его в списке, так как большинство операций можно выполнить внутри списка)
names(lst) <- paste('new',paste0('df_model', 1:5), sep="_")
list2env(lst, envir= .GlobalEnv)
Или используя lapply
lapply(mget(paste0('df_model', 1:5)), merge, x = df_obs, all=TRUE)
Вы могли бы использовать для цикла
for(i in 1:5) {
data <- paste("new_df_model", i, sep = "")
model <- merge(df_obs, paste("df_model", i, sep = ""), all = TRUE)
assign(data, model)
}