我正在尝试编写一个函数来确定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转置或可能是列表或数据框?
答案 0 :(得分:1)
没有标准的方法,所以你应该选择最有效的方法,另一方面又取决于这个向量矢量在创建之后的样子(最好避免任何不必要的转换),以及功能本身的速度。
我相信带有x,y和z列的data.frame
应该是不错的选择;距离函数将非常简单快速:
d<-function(x,y) sqrt((y$x-x[1])^2+(y$y-x[2])^2+(y$z-x[3])^2)
答案 1 :(得分:0)
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