验证R中的矩阵之间的行名和列名是否相同

验证R中的矩阵之间的行名和列名是否相同,r,matrix,R,Matrix,假设我有矩阵1和矩阵2: > one <- matrix(1:9, nrow=3, ncol=3, dimnames=list(c("X","Y","Z"), c("A", "B", "C"))) > one A B C X 1 4 7 Y 2 5 8 Z 3 6 9 > two <- matrix(1:9, nrow=3, ncol=3, dimnames=list(c("X","Y","Z"), c("

假设我有矩阵1和矩阵2:

    > one <- matrix(1:9, nrow=3, ncol=3, dimnames=list(c("X","Y","Z"), c("A", "B", "C")))
    > one
      A B C
    X 1 4 7
    Y 2 5 8
    Z 3 6 9
    > two <- matrix(1:9, nrow=3, ncol=3, dimnames=list(c("X","Y","Z"), c("WRONG", "B", "C")))
    > two
      WRONG B C
    X     1 4 7
    Y     2 5 8
    Z     3 6 9
>一个一个
A、B、C
X 14 7
Y 2 5 8
Z369
>二二
错误的B C
X 14 7
Y 2 5 8
Z369

是否有一个命令可以生成逻辑值来验证矩阵1的列名和行名是否与矩阵2中的列名和行名相同?

您要查找的是
idential()
。对于行名称-

identical(rownames(one), rownames(two))
# [1] TRUE
对于
colnames()
也一样。对于所有的
dimnames()
,同样的事情-

identical(dimnames(one), dimnames(two))
# [1] FALSE
对于同时单独的行和列-

Map(identical, dimnames(one), dimnames(two))
# [[1]]
# [1] TRUE
#
# [[2]]
# [1] FALSE
更新:对于您的评论,您可以尝试使用多个矩阵

length(unique(lapply(list(one, two, three), dimnames))) == 1 

如果返回
FALSE
,则您知道至少有一组
dimnames
是不同的。

如果需要为每一行和每一列标识此项,您可以这样做

cbind(unlist(dimnames(one)), unlist(dimnames(one)) %in% unlist(dimnames(two)))

#     [,1] [,2]   
#row1 "X"  "TRUE" 
#row2 "Y"  "TRUE" 
#row3 "Z"  "TRUE" 
#col1 "A"  "FALSE"
#col2 "B"  "TRUE" 
#col3 "C"  "TRUE" 
否则另一个选择就是

do.call(`%in%`, list(dimnames(one), dimnames(two)))

#for row and column seperately
# [1]  TRUE FALSE  

对于额外的向上投票,链接:
库(magrittr);列出(一,两个)%%>%lappy(dimnames)%%>%Reduce(“相同的”,)
好吧,至少它应该避免第二个答案,用链子:)谢谢你的反馈。如果我想比较两个以上的矩阵,有没有比两个一个比较更简单的方法?@E.Mun-我认为
length(unique(lappy(list(one,two,three),dimnames))==1就可以了。如果是<代码> false <代码>,你知道至少有一组<代码> DimNexs/Cuff>对下面的一个答案有不同之处,请考虑点击灰色复选标记来接受它。