2015-02-12 13 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

相關問題