【问题标题】:Looping through dataframe names in R and saving out corresponding dataframe as Rds file循环遍历 R 中的数据帧名称并将相应的数据帧保存为 Rds 文件
【发布时间】:2019-10-14 07:32:41
【问题描述】:

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

#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 思维。

【问题讨论】:

  • 编辑你的 saverds saveRDS(get(mydfs[i]), file=savefile) 因为 mydfs 只是你的数据框的名称,你需要“获取数据”

标签: r loops dataframe saving-data


【解决方案1】:

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

【讨论】:

  • 你是我的英雄。而已。我完全忘记了get()。非常感谢!我会在 8 分钟后接受(所以在那之前我不会接受。)。
猜你喜欢
  • 2021-11-22
  • 2017-12-14
  • 1970-01-01
  • 2021-12-25
  • 1970-01-01
  • 1970-01-01
  • 2018-11-13
  • 2021-06-25
相关资源
最近更新 更多