代码之家  ›  专栏  ›  技术社区  ›  nickolakis

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

  •  1
  • nickolakis  · 技术社区  · 1 年前

    中的距离系数 R 在两个矢量之间 X , Y 可以用 dcor(X,Y) 的函数 energy 包裹我有一个矩阵 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
    
    1 回复  |  直到 1 年前
        1
  •  3
  •   Darren Tsai    1 年前

    我觉得 energy::dcor 不能在单个数据帧上进行交叉计算,如 stats::cor 。解决方法是使用 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
    
        2
  •  2
  •   akrun    1 年前

    我们可以使用 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