2013-10-12 38 views
6

我想聲明一個包含M 3 3個矩陣的列表。 如果我知道的數目M提前,那麼我可以通過聲明這樣的列表:R:如何聲明M元素的列表對象

elm <- matrix(NA,3,3) 
## Say M = 7 
myList <- list(elm,elm,elm,elm,elm,elm,elm) 

此方法變得麻煩,如果M是大的。更糟糕的是,如果我事先不知道M的價值,這種方法就行不通。如果我要聲明長度爲M的向量,我可以通過調用 做到這一點:

myVec <- rep(NA,M) 

即使我不知道M的提前值。是否有類似的方式來聲明大小爲M的列表?

謝謝

回答

5

嘗試

mylist <- rep(list(elm),7) 

其中,對於S = 3,給

[[1]] 
    [,1] [,2] [,3] 
[1,] NA NA NA 
[2,] NA NA NA 
[3,] NA NA NA 

[[2]] 
    [,1] [,2] [,3] 
[1,] NA NA NA 
[2,] NA NA NA 
[3,] NA NA NA 

[[3]] 
    [,1] [,2] [,3] 
[1,] NA NA NA 
[2,] NA NA NA 
[3,] NA NA NA 

順便說一句,identical(matrix(NA,3,3),matrix(,3,3))爲真,因爲默認情況下矩陣初始化爲NA。請參閱?matrix

+1

如果你的矩陣不相同,alexis_laz的答案會更有用:(1)初始化正確長度的列表,然後(2)用mylist [[i]]賦值給它。 – Frank

+1

謝謝!這就是我想要的! – ThePrincess

12

也許這樣的:

myls <- vector("list", length = S)

+0

這是很好的聲明大小爲S的列表。但是我想聲明一個包含S 3的列表,以便在後面的代碼中我可以調用第i個第(j,k)個元素3列乘3列表:myls [[i]] [j,k] – ThePrincess

+0

嘗試'for(i in 1:length(myls)){myls [[i]] < - elm}; myls' –