Вы можете использовать assign
для присвоения значения переменной. Имена переменных - это строки.
В приведенном ниже коде я зациклил элементы списка и назначенные им имена от вектора names
.
l <- split(mtcars, mtcars$cyl)
names <- c('cyl4', 'cyl6', 'cyl8')
for (i in 1:length(names)) assign(names[i], l[[i]])
Или list2env
Функция, указанная @Roland (и другие). Функция attach
делает что-то подобное.
l <- split(mtcars, mtcars$cyl)
names(l) <- c('cyl4', 'cyl6', 'cyl8')
list2env(l, envir = .GlobalEnv)
Или
attach(l)
Хотя, как уже отмечалось. Это может быть не самая лучшая идея; легче следить за вещами внутри списков. Вы можете просто получить к ним доступ, если нужно, с $
.
l$cyl4
Вы можете назвать элементы списка, то есть 'lst <- split (mtcars, mtcars $ cyl); имена (lst) <- paste0 ('dat', seq_along (lst)) 'и использовать' list2env (lst, envir = .GlobalEnv) 'Но я бы рекомендовал работать со списком вместо того, чтобы иметь несколько объектов в глобальной среде. – akrun
Вы действительно хотите, чтобы они были в своих переменных? Почему бы не использовать вывод из split напрямую? – Dason
Я не мог поверить, что я был первым, кто задал этот вопрос. Дальше Googling появился: http://stackoverflow.com/questions/7519790/assign-multiple-new-variables-in-a-single-line-in-r. Это было более старое сообщение. Может быть, с тех пор появилось что-то лучшее? – wdkrnls