2013-07-10 4 views
1

У меня есть список фреймов данных, который был получен из чтения в 25 CSV-файлах одновременно. Я хотел бы заблокировать кадры данных, чтобы начать пространственный анализ. То есть, я хотел бы иметь отдельные кадры данных для каждого элемента списка.Создайте отдельную переменную для каждого элемента списка

Я пробовал unlist(), но это не дает результат, который я хочу. Я также пробовал подход с lapply(), но он вызывает ошибку. Вот что я пробовал:

x <- 1:3 
y <- 4:6 

l <- lapply(1:2, function(x){data.frame(x, y)}) 

lapply(1:length(l), function(i){paste('df', i, sep = '') <- data.frame(l[[i]])}) 

Проблема заключается в назначении кадра данных вложенному имени. Обернуть его as.character() не помогло.

Это делает работу:

"df1" <- data.frame(l[[1]]) 

Кажется, что проблема находится где-то на выходе моей paste() функции, но выход есть str() «CHR». Любые идеи, как я могу заставить мой подход работать? Есть ли более чистый способ заблокировать мои кадры данных?

+3

'? Assign', если вы чувствуете, что должны это сделать, или'? Attach'. Однако держать их в списке, как правило, гораздо лучше. – baptiste

+0

Не в теме, но зачем приписывать '' df1'' работу? Я бы этого не ожидал. – Marius

+0

@Marius - из '?" <- "' где он указывает 'x <- value' и' x: имя переменной (возможно, указано) 'Так что это означает' '<-" (blah, 1:10) 'и '" <- "(" blah ", 1:10) дают тот же результат. – thelatemail

ответ

4

Один из способов сделать это:

list2env(setNames(l,paste0("df",seq_along(l))), envir = parent.frame()) 

Хотя я бы прислушаться к советам @baptiste «s, прежде чем это слишком поздно, и не делать этого. Почему? Потому что через два дня вы окажетесь в ловушке, используя get() и paste и беспорядочные циклы, чтобы попытаться применить функцию ко всем вашим наборам данных одновременно. Если вы сохраните их в списке, вы можете просто сделать lapply(l,functionname).

+1

Хороший ответ. Для меня это все новые функции. Я предполагаю, что моя мотивация занять это из списка - я новичок в списках, так что мне показалось проще. Но нет времени, как настоящее, поэтому я просто попробую свернуть с ним в виде списка и узнать кое-что. Благодарю. – vitale232

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