在 for 循环中生成变量名称列表,然后为它们赋值

机器算法验证 r
2022-01-19 00:00:01

我想知道是否有一种简单的方法可以使用 for 循环生成变量列表并给出其值。

for(i in 1:3)
{
  noquote(paste("a",i,sep=""))=i
}

在上面的代码中,我尝试创建a1, a2, a3,它分配给 1、2、3 的值。但是,R 给出了错误消息。谢谢你的帮助。

2个回答

您正在寻找assign().

for(i in 1:3){
  assign(paste("a", i, sep = ""), i)    
}

> ls()
[1] "a1"          "a2"          "a3" 

> a1
[1] 1
> a2
[1] 2
> a3
[1] 3

更新

我同意使用循环(经常)是糟糕的 R 编码风格(见上面的讨论)。使用list2env()(感谢@mbq 提及),这是@Han Lin Shang 问题的另一种解决方案:

x <- as.list(rnorm(10000))
names(x) <- paste("a", 1:length(x), sep = "")
list2env(x , envir = .GlobalEnv)

如果值在向量中,则不需要循环:

vals <- rnorm(3)
n    <- length(vals)
lhs  <- paste("a",    1:n,     sep="")
rhs  <- paste("vals[",1:n,"]", sep="")
eq   <- paste(paste(lhs, rhs, sep="<-"), collapse=";")
eval(parse(text=eq))

作为旁注,这就是我喜欢 R 的原因。