如何检查相等维度的100个矩阵中有多少相等?

时间:2018-10-29 19:07:40

标签: r

我目前有100个生成的矩阵,并想验证这100个生成的矩阵中有多少对相等。它们具有相同的尺寸,即1000 x1000。我正在使用的功能是:

equalcheck <- function(x, y) is.matrix(x) && is.matrix(y) && dim(x) == dim(y) && all(x == y)

有没有一种方法可以进行这种测试而不必求助于100选择2的复杂性?

1 个答案:

答案 0 :(得分:2)

@karakfa有一个正确的主意。我们可以根据您的需要使用散列来找出哪些矩阵相同或不同。

library(dplyr)

# Create all your matricies
x = matrix(1:100, nrow=10)
y = matrix(1:100, nrow=10)
z = matrix(101:200, nrow=10)

# Get a list of all objects
lst = lapply(mget(ls()), function(obj) {
    if (is.matrix(obj)) { 
        obj 
    } else { 
        NULL 
    }
})

# Filter out NULLs
lst = Filter(Negate(is.null), lst)

# Create a list of hashes
md5s = lapply(lst, function(obj) digest::digest(obj))

# Create a dataframe of the object names and hashes
df = data_frame(obj=names(lst), md5=unlist(md5s))

# Create a count to find those that are or are not unique
df %>%
    group_by(md5) %>%
    summarise(n = n())

# A tibble: 2 x 2
  md5                                  n
  <chr>                            <int>
1 2511f4beaee85d31d7e2e7746db9f627     2
2 502156778a19de62d2db1832bbe201e2     1