计算 R 中的大量排列

Calculate large number of permutations in R

我在 R 中有 2 个大型数据框,都有大约 100k 行,其中包含地理坐标(纬度/经度)列表。我希望遍历它们以获取项目之间的所有组合,然后对其应用函数。

因为组合的数量大约是110亿(11 x 1.000.000.000),所以我原来使用循环的想法不适用。

数据框类似于:

A<-as.data.frame(cbind(rbind(-0.1822,-0.4419,0.2262),rbind(51.5307,51.4856,51.4535)))

(...)
<!-- -->

V1 . V2

-0.1822 . 51.5307 

-0.4419 . 51.4856

 0.2262 . 51.4535

B<- as.data.frame(cbind(rbind(-0.4764,-0.2142,-0.2197),rbind(51.5221,51.4593,51.5841))) 
(...)
<!-- -->

V1 . V2

-0.4764 . 51.5221

-0.2142 . 51.4593

-0.2197 . 51.5841

我希望输出如下所示:

V1a .   V2a .   V1b .   V2b


-0.1822 . 51.5307 . -0.4764 . 51.5221  

-0.4419 . 51.4856 . -0.4764 . 51.5221

 0.2262 . 51.4535 . -0.4764 . 51.5221

-0.1822 . 51.5307 . -0.2142 . 51.4593

-0.4419 . 51.4856 . -0.2142 . 51.4593

(...)

Whosebug 中的另一个 post ([a link]Calculating great-circle distance matrix ) 建议使用:

应用(A, 1, FUN=函数(X) distHaversine(X, B))

但是,我怀疑创建的矩阵太大,无法完成计算。

关于如何有效解决此问题的任何想法?请记住,我的 objective 此后将应用 Haversine 函数来计算点之间的距离。

谢谢 J

你想要的是:

# expand.grid(A$V1,A$V2,B$V1,B$V2)
expand.grid(cbind(A,B))

但正如您所想,结果会非常大,所以我不确定您的代码是否会 运行。

cmb<-expand.grid(1:nrow(A),1:nrow(B))
cbind(A[cmb[,1],],B[cmb[,2],])

与 Andre 的解决方案不同,这不会在 A 和 B 中创建列的组合(他创建了 81 行,而对于此示例,只需要 9 行)。不过不确定这是否适用于您的大型数据集。