我想在循环中创建一个字符串,并在此循环中将此字符串用作对象。这是一个简化的示例:
for (i in 1:2) {
x <- paste("varname",i, sep="")
x <- value
}
循环应创建varname1,varname2。然后,我想使用varname1,varname2作为对象来分配值。我尝试了paste(),print()等。
感谢帮助!
最佳答案
您可以将call()
创建为<-
,然后对其进行评估。这是一个例子
value <- 1:5
for (i in 1:2) {
x <- paste("varname",i, sep="")
eval(call("<-", as.name(x), value))
}
创建两个对象
varname1
和varname2
varname1
# [1] 1 2 3 4 5
varname2
# [1] 1 2 3 4 5
但是您应该真正避免在方法/函数中使用分配给全局环境。我们可以将列表与
substitute()
一起使用,然后将新变量放在同一位置。f <- function(aa, bb) {
eval(substitute(a <- b, list(a = as.name(aa), b = bb)))
}
Map(f, paste0("varname", 1:2), list(1:3, 3:6))
# $varname1
# [1] 1 2 3
#
# $varname2
# [1] 3 4 5 6