我在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思想弄混了。
答案 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')