代码之家  ›  专栏  ›  技术社区  ›  Alexander Engelhardt

R:如何存储向量的向量

  •  4
  • Alexander Engelhardt  · 技术社区  · 14 年前

    我试图写一个函数来确定x(一个点)和y(一组n个点)之间的欧几里德距离。 我应该如何将y传递给函数?到目前为止,我一直使用这样的矩阵:

         [,1] [,2] [,3]
    [1,]    0    2    1
    [2,]    1    1    1
    

    将点(0,2,1)和(1,1,1)传递给该函数。

    然而,当我将x作为正规(列)向量传递时,这两个变量在函数中不匹配。 我要么转置x或y,要么以另一种方式保存向量向量。

    我的问题是:在R中保存多个向量的标准方法是什么?(我的矩阵y)
    这只是我的y转置还是列表或数据帧?

    2 回复  |  直到 14 年前
        1
  •  1
  •   mbq    14 年前

    没有标准的方法,所以你应该选择最有效的方法,另一方面取决于向量向量在创建后的外观(最好避免任何不必要的转换)和函数本身的速度。

    我相信 data.frame 对于x、y和z列,应该是不错的选择;距离函数将非常简单和快速:

    d<-function(x,y) sqrt((y$x-x[1])^2+(y$y-x[2])^2+(y$z-x[3])^2)
    
        2
  •  0
  •   IRTFM    14 年前

    margin参数=1的apply函数似乎是最明显的:

    > x
         [,1] [,2] [,3]
    [1,]    0    2    1
    [2,]    1    1    1
    > apply(x , 1, function(z) crossprod(z, 1:length(z) )  )
    [1] 7 6
    > 2*2+1*3
    [1] 7
    > 1*1+2*1+3*1
    [1] 6
    

    所以,如果你想要距离,那么差到一个选定点的叉积的平方根似乎是有效的:

    > apply(x , 1, function(z) sqrt(sum(crossprod(z -c(0,2,2), z-c(0,2,2) ) ) ) )
    [1] 1.000000 1.732051