2015-07-08 5 views
3

У меня есть несколько data.frames в среде, которую я хотел бы сохранить в отдельных файлах .RData. Есть ли функция, которая может сохранить все рабочее пространство?R: Сохраните все data.frames в рабочей области, чтобы отделить файлы .RData

Я обычно просто сделать это с помощью следующей функции:

save(x, file = "xy.RData") 

но есть способ, которым я мог бы сохранить все data.frames отдельно сразу?

ответ

7

Создание кучи разных файлов не так, как save() - векторизованное. Наверное, лучше использовать цикл здесь. Сначала получите вектор всех ваших имен data.frame.

dfs<-Filter(function(x) is.data.frame(get(x)) , ls()) 

Теперь напишите каждый файл.

for(d in dfs) { 
    save(list=d, file=paste0(d, ".RData")) 
} 

Или, если вы просто хотели их все в одном файле

save(list=dfs, file="alldfs.RData") 
+2

Не является ли 'saveRDS' более удобным для хранения отдельных кадров данных? – konvas

1

Чтобы сохранить рабочее пространство, которое просто нужно сделать:

save.image("willcontainworkspace.RData") 

Это создает один файл, который содержит всю рабочую область, которая может или не может быть то, что вы хотите, но ваш вопрос не совсем ясно для меня ,

+0

ОР был список данных кадр в среде, и потребовал отдельный файл Rdata для каждого из них. Это не решает эту проблему. –

+0

@PaulHiemstra Да, но они также сказали: «Есть функция, которая способна сохранить всю рабочую область?». Я не говорю, что мое - это именно то, чего они хотят, но оно отвечает на один из их вопросов. – Dason

0

Подобно @ MrFlick Подход, вы можете сделать что-то вроде этого:

invisible({ 
    sapply(ls(envir = .GlobalEnv), function(x) { 
    obj <- get(x, envir = .GlobalEnv) 
    if (class(obj) == "data.frame") { 
     save(obj, file = paste0(x, ".RData")) 
    } 
    }) 
})