使用for循环将数据帧写入R中的dta文件

Using for loop to write data frame as dta file in 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

我将代码更改为 for f in a,但它仍然 returns 错误提示 as.data.frame(f) 未找到。

我认为这就是您想要做的。我假设 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 与 RDS 的示例,请参阅 Ricardo's answer to this question