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

Posted

技术标签:

【中文标题】从向量列表中创建一个 2x2 矩阵列表【英文标题】:Make a list of 2x2 matrices from a list of vectors 【发布时间】:2022-01-08 11:44:47 【问题描述】:

我想从这个列表中列出四个 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 矩阵是@ 中每个向量中第二个元素的组合987654327@等。

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

【问题讨论】:

【参考方案1】:

这个怎么样?在这里,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))

但是由于您的数据基本上是矩形的,因此(我认为)构造和操作矩阵要直观得多。

【讨论】:

非常感谢。 vapply 提示对我很有效。

以上是关于从向量列表中创建一个 2x2 矩阵列表的主要内容,如果未能解决你的问题,请参考以下文章

从具有不同基因的受试者列表中创建一个矩阵,这些基因存在或不存在于 python

在 Torch 中,如何从整数标签列表中创建 1-hot 张量?

如何在 NumPy 中创建一个空数组/矩阵?

如何在 SQL 中创建矩阵/如何使用大量行进行透视

如何从 R 中的向量列表制作矩阵?

想要使用字符串在列表中创建列表