循环遍历 R 中的数据帧名称并将相应的数据帧保存为 Rds 文件

Looping through dataframe names in R and saving out corresponding dataframe as Rds file

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

#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 会话时,我没有预期的数据框,而是包含数据名名称的单个字符向量,而不是数据。

我已经有一段时间没有用 R 编程了,因为我现在的客户更喜欢 SAS,所以我想我在某种程度上将 SAS 中的宏变量循环与 R 混淆了,所以当我调用 saveRDS 时,我是传入单个字符向量而不是实际的数据帧。如何让数据帧而不是字符传递到 saveRDS?

感谢您帮助我理清我的 SAS 思维与我有些生疏的 R 思维。

您目前只是在保存数据框的名称。您可以按如下方式使用 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')