0

我在列表中有数据框,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,但它仍然返回一个错误,提示找不到 as.data.frame(f)。

4

1 回答 1

0

我认为这就是你想要做的。我假设这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. 例如,请参阅Ricardo 对此问题的回答,以获取 Rda 与 RDS 的示例。

于 2018-11-19T18:09:24.320 回答