将两个向量之间的函数投影到R中的 Dataframe 中

pnwntuvh  于 2023-02-20  发布在  其他
关注(0)|答案(2)|浏览(120)

R中两个矢量XY之间的距离系数可以通过energy包中的dcor(X,Y)函数计算得到,我有一个矩阵Z,如下所示

library(energy)

Z <- data.frame(Z1 = c(0.2, 3, 0.01, 3.4, 6),
                Z2 = c(2.2, 3.5, 0.5, 0.3, 7.0),
                Z3 = c(4.7, 0.003, 1.4, 0, 0.6))

我想创建所有组合的距离相关矩阵。我如何创建一个函数来执行此计算?最终结果必须如下所示

Z1     Z2     Z3
Z1   1      0.76   0.76
Z2   0.76   1      0.48
Z3   0.76   0.48   1
u5rb5r59

u5rb5r591#

energy::dcor似乎无法在stats::cor这样的单个 Dataframe 上进行交叉计算。解决方法是使用outer

outer(Z, Z, Vectorize(energy::dcor))

#           Z1        Z2        Z3
# Z1 1.0000000 0.7632896 0.7647835
# Z2 0.7632896 1.0000000 0.4783923
# Z3 0.7647835 0.4783923 1.0000000
2exbekwf

2exbekwf2#

我们可以使用combn来计算所需的成对组合,然后转换为matrix-因此,我们不必重复相同的计算

library(energy)
v1 <- combn(Z, 2, FUN = \(x) dcor(x[[1]], x[[2]]))
as.matrix(as.dist(c(0, v1)))[-1, -1]
        2         3         4
2 0.0000000 0.7632896 0.7647835
3 0.7632896 0.0000000 0.4783923
4 0.7647835 0.4783923 0.0000000

相关问题