在R中匹配两个矩阵列表(按行)
在R中匹配两个矩阵列表(按行),r,list,matrix,R,List,Matrix,a和b是两个对象编号相同的列表。a和b中包含的对象都是矩阵” 我使用以下代码来计算: Map(function(a,b) matrix(sapply(1:3, function(x) {a[,x]==b[,x]}),ncol=3),a,b) [[1]] [,1] [,2] [,3] [1,] FALSE TRUE TRUE [[2]] [,1] [,2] [,3] [1,] FALSE TRUE TRUE [2,] TRUE TRUE TRUE [[3]]
a
和b
是两个对象编号相同的列表。a
和b
中包含的对象都是矩阵”
我使用以下代码来计算:
Map(function(a,b) matrix(sapply(1:3, function(x) {a[,x]==b[,x]}),ncol=3),a,b)
[[1]]
[,1] [,2] [,3]
[1,] FALSE TRUE TRUE
[[2]]
[,1] [,2] [,3]
[1,] FALSE TRUE TRUE
[2,] TRUE TRUE TRUE
[[3]]
[,1] [,2] [,3]
[1,] Logical,0 Logical,0 Logical,0
但我不知道如何继续求和结果,因为第三个对象中有逻辑,0
。您能帮我吗?谢谢。或者是否有其他方法解决此问题。谢谢!这里有一个选项:
Map(function(x,y) apply(x, 1, function(z) rowSums(z == y)), a, b)
#[[1]]
#[1] 2
#
#[[2]]
#[1] 2 3
#
#[[3]]
#numeric(0)
很好的解决方案,但它只适用于OP的示例,不适用于
a=list(结构(c(1,2,2),.Dim=c(1L,3L)),结构(c(2,1,1,1,2,2),.Dim=2:3),结构(c(1,2,2,3,2,5,3,2,1),.Dim=c(3L,3L));b=list(结构(c(2,2),.Dim=c(1L,3L)),结构(1,3,1,3),.Dim=2:3))
@m0h3n,OP指定“列表b的每个矩阵中的行号相同(nrow=1)”
Map(function(a,b) matrix(sapply(1:3, function(x) {a[,x]==b[,x]}),ncol=3),a,b)
[[1]]
[,1] [,2] [,3]
[1,] FALSE TRUE TRUE
[[2]]
[,1] [,2] [,3]
[1,] FALSE TRUE TRUE
[2,] TRUE TRUE TRUE
[[3]]
[,1] [,2] [,3]
[1,] Logical,0 Logical,0 Logical,0
Map(function(x,y) apply(x, 1, function(z) rowSums(z == y)), a, b)
#[[1]]
#[1] 2
#
#[[2]]
#[1] 2 3
#
#[[3]]
#numeric(0)