从向量列表中创建一个 2x2 矩阵列表

Make a list of 2x2 matrices from a list of vectors

我想从这个列表中列出四个 2x2 矩阵

str(SC_sum)    
List of 4
 $ : Named num [1:4] 0.5927 0.2927 0.5977 0.0227
  ..- attr(*, "names")= chr [1:4] "chisel" "disc" "field_cultivator" "moldboard"
 $ : Named num [1:4] 0.408 0.705 0.401 0.4
  ..- attr(*, "names")= chr [1:4] "chisel" "disc" "field_cultivator" "moldboard"
 $ : Named num [1:4] 0.0758 0.1521 0.1028 0.0757
  ..- attr(*, "names")= chr [1:4] "chisel" "disc" "field_cultivator" "moldboard"
 $ : Named num [1:4] 0.924 0.848 0.897 0.454
  ..- attr(*, "names")= chr [1:4] "chisel" "disc" "field_cultivator" "moldboard"

lapply(SC_sum, "matrix", nrow = 2, byrow = T)

我希望我的 chisel 矩阵是 matrix(c(0.5926667, 0.4083333, 0.0758125, 0.9240000), nrow = 2, byrow = F),它是 SC_sum 中四个向量中每一个的第一个元素,然后 disc 矩阵是SC_sum 中每个向量中第二个元素的组合,依此类推。

我当前的 chisel 矩阵是 matrix(c(0.59266667, 0.29266667, 0.59766667, 0.02266667), nrow = 2, byrow = F),它是 第一个向量 的重新排列。如何更改我的代码?非常感谢!

这个怎么样?在这里,x 代替了您的 SC_sum

x <- split(seq_len(16), gl(4, 4))
x <- lapply(x, `names<-`, letters[1:4])
x
$`1`
a b c d 
1 2 3 4 

$`2`
a b c d 
5 6 7 8 

$`3`
 a  b  c  d 
 9 10 11 12 

$`4`
 a  b  c  d 
13 14 15 16 
m <- matrix(unlist(x), nrow = length(x[[1]]), ncol = length(x), 
            dimnames = list(names(x[[1]]), NULL))
m
  [,1] [,2] [,3] [,4]
a    1    5    9   13
b    2    6   10   14
c    3    7   11   15
d    4    8   12   16
l <- apply(m, 1, matrix, ncol = 2, simplify = FALSE)
l
$a
     [,1] [,2]
[1,]    1    9
[2,]    5   13

$b
     [,1] [,2]
[1,]    2   10
[2,]    6   14

$c
     [,1] [,2]
[1,]    3   11
[2,]    7   15

$d
     [,1] [,2]
[1,]    4   12
[2,]    8   16

如果你真的想使用lapply而不是apply,那么你可以这样做:

index <- seq_along(x[[1]])
names(index) <- names(x[[1]])
l <- lapply(index, function(i) matrix(vapply(x, `[[`, 0, i), ncol = 2))

但由于您的数据基本上是矩形的,因此在矩阵上构建和操作(我认为)更加直观。