2015-02-12 42 views
1

我需要指定一些变量值在循环需要指定一些变量值在一个循环中的R

如:

abc_1<- 
abc_2<- 
abc_3<- 
..... 

类似:

for(i in 1:20) 
{ 
paste("abc",i,sep="_")<-some calculated value 
} 

我曾尝试如上所述使用粘贴,但它不起作用。 这怎么能做到。谢谢

+2

看看'assign'。 – A5C1D2H2I1M1N2O1R2T1 2015-02-12 06:15:07

+0

或在将值放入列表中后使用'list2env'。 – akrun 2015-02-12 06:16:19

+2

不要这样命名你的变量。将值放在列表或向量中会更好。 – MrFlick 2015-02-12 06:29:00

回答

2

assign()paste0()应该帮助你。

例如:

object_names <- paste0("abc",1:20) 

for (i in 1:20){ 
    assign(object_names[i],runif(40)) 
} 

assign()取入object_names字符串和在所述第二参数给每个名称分配的功能。当您将一个数字向量放入paste0()的内部时,它将为数值向量中的每个值返回一个连续值的字符向量。

编辑:

正如下面格雷戈尔说,这是更好的做一个列表,因为:

  1. 它会更快。
  2. 制作大量的东西时,您可能想对每个人做同样的事情。 lapply()非常擅长这一点。

例如:

N <- 20 
# create random numbers in list 
abcs <- lapply(1:N,function(i) runif(40)) 
# multiply each vector in list by 10 
abc.mult <- lapply(1:length(abcs), function(i) abcs[[i]] * 10) 
+2

但是,使用列表,而不是帮助更多... – Gregor 2015-02-12 06:48:28

+1

但它并不意味着答案可能没有用...所以这里是一个投票了...... – A5C1D2H2I1M1N2O1R2T1 2015-02-12 06:53:34

+0

你的100%权利,但问题要求创建对象,所以我给了他一个答案。 'stuff < - lapply(1:length(N),runif(10))'会更快。 – 2015-02-12 06:53:52

相关问题