单看这个具体问题本身,的确assign()也是我所知的最好的解决方案。不过向前推一步,回到需求本身,想问下为什么要做这个事情呢?
我之前做过类似的事情:想把一系列的数值赋给几个名称相似的变量(例如“df1”、“df2”、“df3”等),如果一个一个变量赋值的话太麻烦:
v1 = letters[1]
v2 = letters[2]
v3 = letters[3]
所以就用paste0("v", 1:3)
生成几个名字,然后再通过循环和assign()函数赋值给这些名字,生成变量:
for (i in 1:3) {
assign(paste0("v", i), letters[i])
}
但是如果是现在的话,x相比于用assign()这种不常见的函数,我会更倾向于做一个空的列表,给列表单各个元素取名,再将这些数据存储到列表的不同元素中,之后通过调用这个列表各元素的方式,使用这些数据:
v_ls <- vector("list", length = 3)
names(v_ls) <- paste0("v", 1:3)
for (i in 1:3) {
v_ls[[i]] <- letters[i]
}
v_ls