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ループをスキップしてリストを直接操作するにはどうすればよいですか? 「eigen(matrix_list)」のようなことができればいいのですが

4

1 に答える 1

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

> 
于 2012-10-05T12:26:24.927 に答える