r - 子组中的聚合矩阵
问题描述
我的矩阵很少。它们在几个子组中(我有显示这些子组的向量 - 例如矩阵 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
解决方案
如图使用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
推荐阅读
- ubuntu - 如何在ubuntu上使用其环境登录另一个用户
- android - pocketsphinx NullPointerException in onBeginningOfSpeech() 但对象不为空
- r - 从 R 更新/导出到 excel 文件而不保存新工作簿(损坏图形和其他对象)
- firebase - 为 React Native 启用 Firestore 持久性
- apache-spark - 从 RelationalGroupedDataset 访问 sparksession
- artifactory - JFrog 的 Artifactory 是否支持客户端下载简历?
- frama-c - 是否在 Frama-C 中处理无限循环?
- linkedin - Linkedin API 访问令牌获取异常
- ruby-on-rails - 如何修复:PG::ConnectionBad:fe_sendauth:未提供密码
- c# - Asp.Net Boilerplate .Net Core 2.0 AbpAuthorizationFilter - ChallengeResult / 未授权