說我有一個函數,它需要兩個向量並返回一個整數,例如一個元素的數量也在另一個向量中。如: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)))' –