将函数应用于行R的每个组合

时间:2016-03-22 15:07:07

标签: r matrix combinations

说我有一个1802乘2的坐标矩阵(经度/纬度)coord每行代表一个空间点。

   [,1]     [,2]
[1,] -90.0   -5
[2,] -87.5   -5
[3,] -85.0   -5
[4,] -82.5   -5
[5,] -80.0   -5
[6,] -77.5   -5

我使用geospheredistGeo函数计算两点p1和p2之间的测地距离,即

distGeo(coord[1,],coord[2,])

我想建立coord

中每个点之间距离的对称度量矩阵(即1802 * 2,1802 * 2)

尝试循环

for (i in 1:nrow(coord)){ 
 for (j in 1:nrow(coord)){
  distGeo(coord[i,],coord[j,])
 }
 }

需要永远(甚至使用doMPI和chunking),据我所知outer只能使用长度为1的参数。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我没有在R中找到解决方案,而是通过Rcpp使用C ++循环解决方案,只需0.3秒即可运行。

基本步骤:

1 /将纬度/经度坐标转换为n向量(每个点是3d向量)

2 /为每个point_i,j创建一个函数来计算C ++中两者的crossproduct,dotproduct和atan2(遵循描述的算法here)。输入是具有每个点n向量的NumericMatrix。结果是一个NumericMatrix,其中包含每个点之间的角度(以弧度表示)。

3 /使用Rcpp,你只需从R调用函数即可!