我有一个x列y行矩阵。X和y是较大的值。
A B C
GeneA 1 0 0
GeneB 0 0 1
GeneC 0 0 1
GeneD 1 0 1
我想在矩阵的行上应用距离函数,并输出一个维度为y*y的矩阵,每个单元格都有函数的返回值。输出如下所示:
GeneA GeneB GeneC GeneD
GeneA 1.0 0.7 0.0 0.4
GeneB 0.6 0.2 1.0 1.0
GeneC 0.0 0.1 1.0 0.5
GeneD 1.0 0.5 0.1 0.8
我的功能是:
dist <- function(vec1, vec2) {
res=length(intersect(vec1,vec2))/length(union(vec1,vec2))
return (res)
}
您可以尝试outer
,您可以根据需要定义距离函数
outer(
1:nrow(mat),
1:nrow(mat),
Vectorize(function(x, y) sqrt(sum((mat[x, ] - mat[y, ])^2)))
)
或更简单的使用dist
(感谢@akrun的提醒)
as.matrix(dist(mat))