gpt4 book ai didi

r - 如何在循环中使用 saveRDS 并将对象名称作为变量传递 - R

转载 作者:行者123 更新时间:2023-12-04 09:18:13 25 4
gpt4 key购买 nike

我正在尝试在循环中使用 saveRDS,我有一个名为 XDATA 的列表,其中包含 21 个矩阵和一个名为 names 的列表,其中包含我想将这些矩阵保存在其中的 21 个名称。这是我尝试过的两种解决方案,都没有奏效:

for (i in 1:21) {
assign(names[i],XDATA[[i]])
saveRDS(as.name(names[i]),file = paste(names[i],'.RDS',sep=''),compress=TRUE)
}

这只是保存了一个包含 as.name(names[i]) 符号的 1kb 文件。我的第二次尝试是:
for (i in 1:21) {
assign(names[i],XDATA[[i]])
eval(parse(paste('saveRDS(',names[i],",file=paste(names[i],'.RDS',sep=''),compress=TRUE)", sep="")))
}

这会导致以下错误:

Error in file(filename, "r") : cannot open the connection In addition: Warning message: In file(filename, "r") : cannot open file 'saveRDS(Sub_502,file=paste(names[1],'.RDS',sep=''),compress=TRUE)': No such file or directory



我很感激这个问题的有效解决方案,也许可以解释为什么你在第一个解决方案中使用 as.name 传递失败,尽管语法似乎很合理。

谢谢!

最佳答案

你可能应该做

for (i in 1:21) {
assign(names[i],XDATA[[i]])
saveRDS(get(names[i]),file = paste(names[i],'.RDS'),compress=TRUE)
}

您传递给 saveRDS 的第一个对象需要是您要保存的对象,而不仅仅是它的名称。 “名称”是您也可以保存的变量类型;它不同于对象本身。在这里, get()返回给定名称的字符版本的对象的值。

我不完全确定您为什么要为 assign() 而烦恼。反正。与 save()/load() 不同, saveRDS不保留对象名称。你可以做
for (i in 1:21) {
saveRDS(XDATA[[i]],file = paste(names[i],'.RDS'),compress=TRUE)
}

关于r - 如何在循环中使用 saveRDS 并将对象名称作为变量传递 - R,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26853234/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com