循环浏览R中的数据框名称,并将相应的数据框另存为Rds文件

时间:2019-05-28 18:06:57

标签: r loops dataframe saving-data

我在R会话中加载了大约30个单独的数据帧,每个数据帧都有不同的名称。我还有一个名为mydfs的字符向量,其中包含加载到我的R会话中的所有那些数据帧的名称。我正在尝试遍历mydfs并将mydfs元素中列出的每个数据帧另存为rds文件,但是由于某些原因,我只能保存数据帧名称的字符串正在尝试保存(而不是datafame本身)。这是我所拥有的模拟的,可复制的示例:

#Create vector of dataframes that exist in base r to create a reproducible example
mydfs<-c("cars","iris","iris3","mtcars")

#My code that creates files, but they don't contain my dataframe data for some reason
for (i in 1:length(mydfs)){
  savefile<-paste0(paste0("D:/Data/", mydfs[i]), ".Rds")
  saveRDS(mydfs[i], file=savefile)
  print(paste("Dataframe Saved:", mydfs[i]))
}

这将导致以下日志输出:

[1] "Dataframe Saved: cars"
[1] "Dataframe Saved: iris"
[1] "Dataframe Saved: iris3"
[1] "Dataframe Saved: mtcars"

然后,我尝试读回我创建的任何文件:

#But when read back in only contain a single character string of the dataframe name
a<-readRDS("D:/Data/iris3.Rds")
str(a)


chr "iris3"

请注意,当我使用readRDS将iris3.Rds读回到新的R会话时,我没有一个我期望的数据帧,而是一个包含数据名而不是数据的单个字符向量。

由于我当前的客户更喜欢SAS,所以我已经有一段时间没有用R编程了,所以我认为我在某种程度上使SAS中的宏变量循环与R混淆了,所以当我调用saveRDS时,我传入了单个字符向量,而不是实际的数据帧。如何获取要传递给saveRDS而不是字符的数据框?

感谢您帮助我将我的SAS思想与我一些生疏的R思想弄混了。

1 个答案:

答案 0 :(得分:3)

您当前正在保存数据框的名称。您可以按以下方式使用get函数:

mydfs<-c("cars","iris","iris3","mtcars")

for (i in 1:length(mydfs)){
  savefile<-paste0(paste0("D:/Data/", mydfs[i]), ".Rds")
  saveRDS(get(mydfs[i]), file=savefile)
  print(paste("Dataframe Saved:", mydfs[i]))
}

readRDS('D:/Data/iris3.RDS')