2012-10-05 74 views
0

我有一個列表,如下面的列表,其中包含我想要執行單獨操作的矩陣。列表中的對象的矩陣操作

data <- data.frame(matrix(data = c(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,2,0,0,0,0,2,0,0,0,0,2,0,0,0,0,2), nrow = 8, ncol = 4, byrow = TRUE)) 
matrix_list <- list(data[1:4, ], data[5:8, ]) 

我知道我可以在每個對象上做矩陣運算分開,這樣

eigen(matrix_list[[1]]) 

而且我可以做的所有項目的操作與for

for (i in 1:2){print(eigen((data_list[[i]])))} 

哪有我跳過for循環並直接在列表上操作?這將是巨大的,如果我可以像做「徵(matrix_list)」

回答

3

使用lapply到列表工作在

lapply(matrix_list, eigen) 
[[1]] 
[[1]]$values 
[1] 1 1 1 1 

[[1]]$vectors 
    [,1] [,2] [,3] [,4] 
[1,] 0 0 0 1 
[2,] 0 0 1 0 
[3,] 0 1 0 0 
[4,] 1 0 0 0 


[[2]] 
[[2]]$values 
[1] 2 2 2 2 

[[2]]$vectors 
    [,1] [,2] [,3] [,4] 
[1,] 0 0 0 1 
[2,] 0 0 1 0 
[3,] 0 1 0 0 
[4,] 1 0 0 0 

如果你有興趣只值或向量你可以選擇它們使用:

Eigen <- lapply(matrix_list, eigen) 
> sapply(Eigen, '[', 'values') # Extrating eigen values 
$values 
[1] 1 1 1 1 

$values 
[1] 2 2 2 2 

> sapply(Eigen, '[', 'vectors') # Extrating eigen vectors 
$vectors 
    [,1] [,2] [,3] [,4] 
[1,] 0 0 0 1 
[2,] 0 0 1 0 
[3,] 0 1 0 0 
[4,] 1 0 0 0 

$vectors 
    [,1] [,2] [,3] [,4] 
[1,] 0 0 0 1 
[2,] 0 0 1 0 
[3,] 0 1 0 0 
[4,] 1 0 0 0 

> 
+1

+1很快!!!! – mnel