我正在尝试编写一个函数来确定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转置,或者可能是一个列表或数据帧?
发布于 2010-11-13 22:20:25
没有标准的方法,所以你应该选择最有效的方法,另一方面取决于向量的向量在创建后的外观(最好避免任何不必要的转换)和函数本身的速度。
我认为包含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)发布于 2010-11-14 03:47:35
参数为1的应用函数似乎是最明显的:
> 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.732051https://stackoverflow.com/questions/4172667
复制相似问题