【发布时间】: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