我目前有100个生成的矩阵,并想验证这100个生成的矩阵中有多少对相等。它们具有相同的尺寸,即1000 x1000。我正在使用的功能是:
equalcheck <- function(x, y) is.matrix(x) && is.matrix(y) && dim(x) == dim(y) && all(x == y)
有没有一种方法可以进行这种测试而不必求助于100选择2的复杂性?
答案 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