Использование цикла for для записи фрейма данных в виде файла dta в R - PullRequest
0 голосов
/ 19 ноября 2018

У меня есть фреймы данных в списке a, и я хочу использовать цикл, чтобы сохранить их как rda и записать как dta. Я не понимаю, почему я получаю сообщение об ошибке, что кадр данных объекта не может быть найден:

for (f in a) {
  for (name in 1:length(filenames)) {
    save(as.data.frame(f),file = paste("~/Dropbox/Data_Insert/Panels/",name,end_rda,sep=""))
    write.dta(as.data.frame(f),file = paste("~/Dropbox/Data_Insert/Panels/",name,end_dta,sep=""))
         }
}

Error in save(as.data.frame(f), file = paste("~/Dropbox/Data_Insert/Panels/",  : 
  object ‘as.data.frame(f)’ not found

Итак, f, это будет индексировать фрейм данных в списке? Я сделал as.data.frame(f), потому что когда я использовал только f, я получил сообщение:

The object "dataframe" must have class data.frame

Я изменил код на для f в a, но он по-прежнему возвращает ошибку о том, что as.data.frame (f) не найден.

1 Ответ

0 голосов
/ 19 ноября 2018

Я думаю, что это то, что вы пытаетесь сделать. Я предполагаю, что a - это список фреймов данных, а filenames - это символьный вектор такой же длины.

for (i in 1:length(a)) {
  to_save = as.data.frame(a[[i]])
  save(to_save, file = paste0("~/Dropbox/Data_Insert/Panels/", filenames[i], end_rda))
  write.dta(to_save, file = paste0("~/Dropbox/Data_Insert/Panels/", filenames[i], end_dta))
}

Обратите внимание, что save сохраняет имя объекта R, поэтому при load любом из этих файлов он будет загружен в рабочую область с именем to_save. Это кажется плохим. Для отдельных объектов R я настоятельно рекомендую вам использовать saveRDS и создавать файлы .RDS вместо save. См., Например, ответ Рикардо на этот вопрос для примера Rda vs RDS.

...