2016-06-01 2 views
0

У меня есть список dataframes, называемый db; каждый фрейм данных имеет свое имя. я использую:Как использовать lapply для посылки элементов списка в разные кадры данных

lapply(names(db), 
     function(x)write.csv(db[x], 
          file =paste0(x,'.csv'))) 

извлечь d.frames и сохранять их в CSV-файлов. Теперь я пытаюсь extact из списка dataframes и создавать различные dataframes с этой командой:

lapply(names(db), 
     function(x)as.data.frame(db[x])) 

Но он не хранит ни одного кадра данных в рабочее пространство, как я могу хранить каждый ДФ с разными названиями в рабочее пространство?

ответ

1

Мы извлечь list элементы с [[

lapply(names(db), function(x) write.csv(db[[x]], 
     file =paste0(x,'.csv'), row.names=FALSE, quote= FALSE)) 

в db[x] еще list из data.frame с length 1.

Если это большие наборы данных, то fwrite функция от data.table будет более эффективным

library(data.table) 
lapply(names(db), function(x) fwrite(db[[x]], file = paste0(x, ".csv"))) 

Просто, чтобы проиллюстрировать эту проблему,

set.seed(24) 
db <- setNames(lapply(1:3, function(i) as.data.frame(matrix(sample(1:9, 
          5*4, replace=TRUE), ncol=4))), paste0("df", 1:3)) 

Разница между подходом OP и в [[ в подходе ФП в это write файлы с именами столбцов, которые имеют префикс из names из «дб 'в то время как у [[ не будет такой проблемы.


Что касается второй проблемы, что создает несколько объектов в глобальной среде, мы можем использовать list2env непосредственно на «дб»

list2env(db, envir = .GlobalEnv) 

Но это не рекомендуется, так как это большая часть операции могут выполняться в пределах самого list.

df1 
# V1 V2 V3 V4 
#1 3 9 6 9 
#2 3 3 4 2 
#3 7 7 7 1 
#4 5 8 7 5 
#5 6 3 3 2 

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

  • Нет связанных вопросов^_^