2015-07-14 3 views
1

Есть ли уже существующий метод назначения каждого из этих объектов data.frame для разделения переменных?Как назначить несколько значений как один раз в R?

list(cyl4, cyl6, cyl8) <- split(mtcars, mtcars$cyl) 

Ошибка в списке (х, у, г) < - сплит (mtcars, mtcars $ цил): не может найти функцию «список < -

+3

Вы можете назвать элементы списка, то есть 'lst <- split (mtcars, mtcars $ cyl); имена (lst) <- paste0 ('dat', seq_along (lst)) 'и использовать' list2env (lst, envir = .GlobalEnv) 'Но я бы рекомендовал работать со списком вместо того, чтобы иметь несколько объектов в глобальной среде. – akrun

+1

Вы действительно хотите, чтобы они были в своих переменных? Почему бы не использовать вывод из split напрямую? – Dason

+0

Я не мог поверить, что я был первым, кто задал этот вопрос. Дальше Googling появился: http://stackoverflow.com/questions/7519790/assign-multiple-new-variables-in-a-single-line-in-r. Это было более старое сообщение. Может быть, с тех пор появилось что-то лучшее? – wdkrnls

ответ

2

Вы можете использовать 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 
+1

Лучше использовать 'list2env' ... Но на самом деле ответ не должен делать этого. – Roland

+0

круто! Раньше я никогда не видел list2env, я изменю свой ответ –

Смежные вопросы