2016-01-11 5 views
0

У меня есть список фреймов данных, которые я хочу сохранить в независимых .csv-файлах.Сохраните все кадры данных в списке, чтобы отделить файлы .csv

В настоящее время у меня есть новая линия для каждого кадра данных:

write.csv(lst$df1, "C:/Users/.../df1") 
write.csv(lst$df2, "C:/Users/.../df2") 
ad nauseam 

Очевидно, что это не идеал: изменение имен означало бы идти через каждый случай и его обновления. Я подумал использовать что-то вроде

lapply(lst, f(x) write.csv(x, "C:/Users/.../x") 

но это явно не сработает. Как сохранить каждый фрейм данных в списке в виде отдельного CSV-файла?

ответ

3

Вы можете сделать это:

N <- names(lst) 
for (i in seq_along(N)) write.csv(lst[[i]], file=paste0("C:/Users/.../"), N[i], ".csv") 

После комментария Heroka сокращенного варианта:

for (df in names(lst)) write.csv(lst[[df]], file=paste0("C:/Users/.../"), df, ".csv") 

или

lapply(names(lst), function(df) write.csv(lst[[df]], file=paste0("C:/Users/.../"), df, ".csv")) 
+1

Поскольку вы также можете получить доступ к элементам списка по имени, вы можете даже перебирать имена самих себя. – Heroka

2

В mapply функции и ее Map оболочки является мульти -аргументные версии lapply , У вас есть список data.frame s; вам нужно создать вектор имен файлов. Например:

filenames<-paste0("C:/Users/.../",names(lst), ".csv") 
Map(write.csv,lst,filenames) 

Что Map делает? Он вызывает функцию, представленную как первый аргумент несколько раз, и на каждой итерации ее аргументы берутся из элементов других предоставленных аргументов. Что-то на линии:

list(write.csv(lst[[1]],filenames[[1]]),write.csv(lst[[2]],filenames[[2]]),...)