使用for循环将数据帧保存为.Rdata文件[重复]

Posted

技术标签:

【中文标题】使用for循环将数据帧保存为.Rdata文件[重复]【英文标题】:Saving dataframes as .Rdata files using a for loop [duplicate] 【发布时间】:2020-01-14 16:45:50 【问题描述】:

我正在尝试将一堆数据帧保存为 .RData 文件。现在我是这样处理的:

save(Dataset_1, file = "Hypothesis1/Dataset1.RData")
save(Dataset_2, file = "Hypothesis1/Dataset2.RData")
save(Dataset_3, file = "Hypothesis1/Dataset3.RData")

这可行,但我想使用 for 循环保存这些数据帧。我在想这样的事情:

for (i in 1:11)
  save(paste0("Dataset_",i), file = "paste0("Hypothesis1/Dataset",i, ".RData")" 

不幸的是,这似乎没有奏效,有人知道为什么会这样吗?

【问题讨论】:

为什么引用"paste0("Hypothesis1/Dataset",i, ".RData")" 看来你引用了"paste0(" try : save(paste0("Dataset_",i), file = paste0("Hypothesis1/Dataset",i, ".RData")跨度> 如果我删除引号并尝试 (i in 1:11) save(paste0("Dataset_",i), file = paste0("Hypothesis1/Dataset",i, ".RData ")) 我得到对象 'paste0("Dataset_", i)' not found 【参考方案1】:

您需要将数据集的名称设为 save() 之外的名称,因为它将第一个参数作为字符或符号进行评估,并且不会评估函数。

另外,您需要去掉第二个 paste0 周围的引号,并关闭看起来像错字的 save() 的括号。

for (i in 1:11)
    dbname <- paste0("Dataset_",i)
  save(dbname, file = paste0("Hypothesis1/Dataset",i, ".RData"))

更好的方法是使用apply 函数,使用ls 列出您的数据集名称,并使用list = ... 参数将它们作为字符传递给save

lapply(ls(pattern="Dataset[0-9]+"), function(x) save(list = x, file = paste0("Hypothesis1/",x,".RData")))

【讨论】:

真的你应该使用list=参数而不是创建一个不必要的变量:save(list = paste0("Dataset_", i), file = paste0("Hypothesis1/Dataset", i, ".RData")) @MrFlick 正在研究apply 解决方案。这只是为了说明 OP 在他们自己的解决方案中出了什么问题,虽然不是最好的。 谢谢,现在说得通了 :)

以上是关于使用for循环将数据帧保存为.Rdata文件[重复]的主要内容,如果未能解决你的问题,请参考以下文章

使用 rpy2 在 Python 中保存 RData 工作区

在循环中动态命名保存的对象[重复]

附加在 for 循环中生成的 pandas 数据帧

在循环中保存 Rdata 和图形

将通过 FOR 循环函数输出的多个数据帧合并为一个数据帧

如何打开多个 .RDATA 并将其中一个名称保存为 data.frame