说我有一个函数,它需要两个向量并返回一个整数,例如一个元素的数量也在另一个向量中。如:n * m矩阵的所有列组合的函数产生m * m结果
f <- function(v1,v2)sum(v1 %in% v2)
如何将该函数应用于n * m矩阵中m列的所有成对组合。
set.seed(1)
m <- replicate(3, sample(letters[1:10], size = 5))
dimnames(m) <- list(NULL, paste0('c', 1:ncol(m)))
现在,
> m
[,1] [,2] [,3]
[1,] "c" "i" "c"
[2,] "d" "j" "b"
[3,] "e" "f" "f"
[4,] "g" "e" "j"
[5,] "b" "a" "e"
,并就前两列的功能:
> f(m[,1], m[,2])
[1] 1 #'e' is shared.
如何做到这一点的所有列的组合?结果可能是am * m矩阵(结果对称于对角线),或者,也可能是一个长格式的数据框,其中包含v1,v2列和函数的结果(例如,第一行将是c1
, c2
和3
)
我试图调查功能outer
和expand.grid
但找不到解决方案。
做到这一点对于这个特定的情况下,又见'crossprod(表(男,山坳(M)))' –