通过字符向量中的对象名循环保存对象并重命名环境对象遇问题
解决R中循环里动态命名对象的保存问题
你的问题出在save()函数的参数用法上:save()默认接受的是对象的符号名(比如直接写Data_a),而不是字符串形式的对象名(比如"Data_a")。你用paste0()生成的是字符串,直接传给save()的话,它会去找一个叫这个字符串的对象,自然找不到。
下面给两种可行的解决方法:
方法1:使用save()的list参数(推荐)
save()的list参数可以直接接受字符向量形式的对象名,完美适配循环里的动态命名场景:
myvec <- c("a", "b", "c") for(i in myvec){ Data <- i name <- paste0("Data_", i) assign(name, Data) # 用list参数传入字符串形式的对象名 save(list = name, file = paste0(name, ".RData")) }
方法2:用get()把字符串转为对象引用
get()函数可以根据字符串找到对应的对象,再传给save():
myvec <- c("a", "b", "c") for(i in myvec){ Data <- i name <- paste0("Data_", i) assign(name, Data) # 先通过get获取对象,再保存 save(get(name), file = paste0(name, ".RData")) }
两种方法都能实现你要的效果:循环创建Data_a、Data_b、Data_c对象,并分别保存为Data_a.RData、Data_b.RData、Data_c.RData文件。
内容的提问来源于stack exchange,提问作者Jakob
相关产品推荐
相关产品推荐

