对r中矩阵中所有行的置换应用一个函数

  • 本文关键字:应用 函数 一个 r apply
  • 更新时间 :
  • 英文 :


我有一个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))

最新更新