Попробуйте list2env(eqRegions,envir=.GlobalEnv)
attach(eqRegions)
должно быть достаточно. Но я рекомендую работать с ними в форме list
, используя lapply
. Я гарантирую, что это приведет к более простому коду.
ls
, но в примере в вашем комментарии вы можете получить 8
с помощью `8
`.
– Matthew Plourde
28 May 2015 в 21:01
s <- split(mtcars, mtcars$cyl); attach(s)
. Использование ls()
не отображается, а использование '8'
не дает финальной таблицы (оно работает, если я обозначил уровни уровня цилиндров [1: 3]
– user20650
28 May 2015 в 23:33
list2env возвращает кадры данных в глобальную среду, имена которой являются именами в списке. Альтернативой, если вы хотите иметь одно и то же имя для фреймов данных, но идентифицированное i из цикла:
for (i in 1:length(eqRegions)) {
assign(paste0("eqRegions", i), as.data.frame(eqRegions[[i]]))
}
Это может быть медленным, если длина, если список слишком длинный.
В качестве альтернативы, «наилучшей практикой» при расщеплении данных, как это, является сохранение данных в кадре, как предусмотрено split
. Для его обработки вы используете либо один из sapply
, либо lapply
(многие факторы) и записываете вывод обратно в список. Например:
eqRegionsProcessed <- lapply(eqRegions, function(df) {
## do something meaningful here
})
Это, очевидно, работает только в том случае, если вы делаете одно и то же для каждого файла data.frame.
Если вы действительно должны разбить их и разобраться с каждым данным. кадр однозначно, то ответы @ MatthewPlourde и @ MaratTalipov будут работать.
Это должно сработать. Имя созданных data.frames будет равно именам внутри eqDataAll$SeismicRegion
. В любом случае, эта практика заполнения отдельных data.frames не рекомендуется. Чем больше я работаю с R, тем больше я люблю / пользуюсь списком.
lapply(names(eqRegions), function(x) assign(x, eqRegions[[x]], envir = .GlobalEnv))
edit: опубликовано решение list2env
. Не знал о функции list2env
.