我想知道是否有一种简单的方法可以使用 for 循环生成变量列表并给出其值。
for(i in 1:3)
{
noquote(paste("a",i,sep=""))=i
}
在上面的代码中,我尝试创建a1
, a2
, a3
,它分配给 1、2、3 的值。但是,R 给出了错误消息。谢谢你的帮助。
我想知道是否有一种简单的方法可以使用 for 循环生成变量列表并给出其值。
for(i in 1:3)
{
noquote(paste("a",i,sep=""))=i
}
在上面的代码中,我尝试创建a1
, a2
, a3
,它分配给 1、2、3 的值。但是,R 给出了错误消息。谢谢你的帮助。
您正在寻找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 的原因。