首页 > 解决方案 > 子组中的聚合矩阵

问题描述

我的矩阵很少。它们在几个子组中(我有显示这些子组的向量 - 例如矩阵 1 和 2 在 A 组中,矩阵 3 在 B 组中,矩阵 4、5、6 在 C 组中,等等)。我想将所有矩阵添加到一组中以获得新矩阵。总结一下:输入 - 一些子组中的矩阵,输出 - 子组向量维数的矩阵)

我该怎么做?我尝试使用“聚合”和“应用”,但它不起作用:

聚合(列表 1,列表 2,函数)

在哪里

list1 包含我所有的矩阵

list2 包含子组

func - 我添加矩阵的函数(可以是标准的“+”)

例子

> subgroups=c(1,1,2,3,3,3)
> M1<-matrix(c(2,3,1,4),2,2)
> M1
     [,1] [,2]
[1,]    2    1
[2,]    3    4
> M2<-matrix(c(3,0,1,1),2,2)
> M2
     [,1] [,2]
[1,]    3    1
[2,]    0    1
> M3<-matrix(c(0,0,1,1),2,2)
> M3
     [,1] [,2]
[1,]    0    1
[2,]    0    1
> M4<-matrix(c(0,2,-9,-3),2,2)
> M4
     [,1] [,2]
[1,]    0   -9
[2,]    2   -3
> M5<-matrix(c(0,0,1,1),2,2)
> M5
     [,1] [,2]
[1,]    0    1
[2,]    0    1
> M6<-matrix(c(-1,2,2,1),2,2)
> M6
     [,1] [,2]
[1,]   -1    2
[2,]    2    1
> result=list(M1+M2,M3,M4+M5+M6)
> result
[[1]]
     [,1] [,2]
[1,]    5    2
[2,]    3    5

[[2]]
     [,1] [,2]
[1,]    0    1
[2,]    0    1

[[3]]
     [,1] [,2]
[1,]   -1   -6
[2,]    4   -1

标签: rmatrix

解决方案


如图使用tapply

L <- list(M1, M2, M3, M4, M5, M6)  # or mget(ls(pattern = "^M\\d$"))
tapply(L, subgroups, Reduce, f = "+")

给予:

$`1`
     [,1] [,2]
[1,]    5    2
[2,]    3    5

$`2`
     [,1] [,2]
[1,]    0    1
[2,]    0    1

$`3`
     [,1] [,2]
[1,]   -1   -6
[2,]    4   -1

推荐阅读