匹配R中的两个矩阵列表(逐行)

光钉

ab是两个列表,其中所述对象数目是相同的。同时包含a的对象b是矩阵”。

a<-list(matrix(c(1,2,2),1,3),matrix(c(2,1,1,1,2,2),2,3),matrix(,0,3))
b<-list(matrix(c(2,2,2),1,3),matrix(c(1,1,2),1,3),matrix(c(1,2,1),1,3))
> a
[[1]]
     [,1] [,2] [,3]
[1,]    1    2    2

[[2]]
     [,1] [,2] [,3]
[1,]    2    1    2
[2,]    1    1    2

[[3]]
     [,1] [,2] [,3]

> b
[[1]]
     [,1] [,2] [,3]
[1,]    2    2    2

[[2]]
     [,1] [,2] [,3]
[1,]    1    1    2

[[3]]
     [,1] [,2] [,3]
[1,]    1    2    1

从上面,我们可以看到有3个对象(即基体)中ab列表中每个矩阵中的行号各a不相同,而列表中每个矩阵中的行号b均相同(nrow=1)。我想将中的每一行a与中的相应行进行比较b,并计算出多少个位置(在各个列中)相同。

让我们在第二个对象都ab一个例子。在中a,对象2是一个矩阵(ncol=3, nrow=2),我们需要将每一行与中的第二个矩阵进行比较b的第二个对象的第一行a2 1 2,我们可以看到第二个和第三个数字与b1 1 2)中的第二个对象相同,因此输出为2,然后我们继续使用第二个行(1 1 2)进行比较,我们发现这三个数字与2list中的对象都相同b,因此输出为3

预期结果如下:

[[1]]
[1] 2

[[2]]
[1] 2 3

[[3]]
[1] 0

我使用以下代码进行计算:

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

但是我不知道如何继续求和,因为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)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章