将函数应用于行 R 的每个组合
apply function to every combination of rows R
假设我有一个 1802 x 2 坐标矩阵 (longitude/latitude) coord
每一行代表 space.
中的一个点
[,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
我使用 geosphere
包 distGeo
函数计算两点 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 和分块),据我所知 outer
只能使用长度为 1 的参数。
有什么想法吗?
我没有在 R 中找到解决方案,而是通过 Rcpp 求助于 C++ 循环解决方案,只用了 0.3 秒就达到了 运行。
基本步骤:
1/将lat/lon坐标转换成n个向量(每个点都是一个3d向量)
2/ 创建一个函数,用 C++ 为每个 point_i,j 计算两者的叉积、点积和 atan2(遵循描述的算法 here)。输入是具有每个点 n 向量的 NumericMatrix。结果是一个 NumericMatrix,其中包含每个点之间的角度(以弧度为单位)。
3/使用 Rcpp,您只需从 R 调用函数,瞧!
假设我有一个 1802 x 2 坐标矩阵 (longitude/latitude) coord
每一行代表 space.
[,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
我使用 geosphere
包 distGeo
函数计算两点 p1 和 p2 之间的测地线距离,即
distGeo(coord[1,],coord[2,])
我想在 coord
尝试循环
for (i in 1:nrow(coord)){
for (j in 1:nrow(coord)){
distGeo(coord[i,],coord[j,])
}
}
需要永远(即使使用 doMPI 和分块),据我所知 outer
只能使用长度为 1 的参数。
有什么想法吗?
我没有在 R 中找到解决方案,而是通过 Rcpp 求助于 C++ 循环解决方案,只用了 0.3 秒就达到了 运行。
基本步骤:
1/将lat/lon坐标转换成n个向量(每个点都是一个3d向量)
2/ 创建一个函数,用 C++ 为每个 point_i,j 计算两者的叉积、点积和 atan2(遵循描述的算法 here)。输入是具有每个点 n 向量的 NumericMatrix。结果是一个 NumericMatrix,其中包含每个点之间的角度(以弧度为单位)。
3/使用 Rcpp,您只需从 R 调用函数,瞧!