Использование цикла for для записи фрейма данных в виде файла dta в R

У меня есть фреймы данных в списке 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 ответ

Решение

Я думаю, что это то, что вы пытаетесь сделать. Я предполагаю что 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.

Другие вопросы по тегам