如何在R中详尽地比较两个不同的矩阵



我有两个矩阵(mat1和mat2(,它们的列数相同(各四列(,行数不同(一个矩阵有三个,另一个有五个(。我想将一个矩阵中的每一行与另一个矩阵的每一行都进行比较。两个矩阵中的值和行中的位置应该相同。我一直在尝试"应用"函数,但在定义函数时遇到了问题:apply(mat2,1,function(x){mat1[x,]==mat2 [x,]}和其他类似的组合会导致消息"下标越界"。我对这个世界很陌生(R和编程(,在网上有搜索信息,但我什么都没找到。我真的被卡住了。我非常感谢你的帮助。提前谢谢。Carpa

> mat1
[,1] [,2] [,3] [,4]
[1,]    2   44    3    9
[2,]   13   56   13   13
[3,]    4    9   14   33
> mat2
[,1] [,2] [,3] [,4]
[1,]    1    6   11   16
[2,]    2    7   12   17
[3,]    3    8   13   18
[4,]    4    9   14   19
[5,]    5   10   15   20
> 
The output that I am looking for is:
> [1,]
[,1] [,2] [,3] [,4]
[1,]    FALSE FALSE FALSE FALSE
[2,]    TRUE  FALSE FALSE FALSE
[3,]    FALSE FALSE FALSE FALSE
[4,]    FALSE FALSE FALSE FALSE
[5,]    FALSE FALSE FALSE FALSE
> [2,]
[,1] [,2] [,3] [,4]
[1,]    FALSE FALSE FALSE FALSE
[2,]    FALSE FALSE FALSE FALSE
[3,]    FALSE FALSE  TRUE FALSE
[4,]    FALSE FALSE FALSE FALSE
[5,]    FALSE FALSE FALSE FALSE
> [3,]
[,1] [,2] [,3] [,4]
[1,]    FALSE FALSE FALSE FALSE
[2,]    FALSE FALSE FALSE FALSE
[3,]    FALSE FALSE FALSE FALSE
[4,]    TRUE  TRUE  TRUE  FALSE
[5,]    FALSE FALSE FALSE FALSE

1。应用

array(apply(mat1, 1, function(x) t(x == t(mat2))), dim = c(dim(mat2), nrow(mat1)))

2.tapply

tapply(mat1, row(mat1), function(x) t(x == t(mat2)))

3.搭接

lapply(split(mat1, row(mat1)), function(x) t(x == t(mat2)))

输出

$`1`
[,1]  [,2]  [,3]  [,4]
[1,] FALSE FALSE FALSE FALSE
[2,]  TRUE FALSE FALSE FALSE
[3,] FALSE FALSE FALSE FALSE
[4,] FALSE FALSE FALSE FALSE
[5,] FALSE FALSE FALSE FALSE
$`2`
[,1]  [,2]  [,3]  [,4]
[1,] FALSE FALSE FALSE FALSE
[2,] FALSE FALSE FALSE FALSE
[3,] FALSE FALSE  TRUE FALSE
[4,] FALSE FALSE FALSE FALSE
[5,] FALSE FALSE FALSE FALSE
$`3`
[,1]  [,2]  [,3]  [,4]
[1,] FALSE FALSE FALSE FALSE
[2,] FALSE FALSE FALSE FALSE
[3,] FALSE FALSE FALSE FALSE
[4,]  TRUE  TRUE  TRUE FALSE
[5,] FALSE FALSE FALSE FALSE

相关内容

  • 没有找到相关文章

最新更新