我试图使用bigmemory R中计算距离矩阵超过100,00,000(粗略估计)行16列R:distm大内存
数据的一小部分看起来像这样
list1 <- data.frame(longitude = c(80.15998, 72.89125, 77.65032, 77.60599,
72.88120, 76.65460, 72.88232, 77.49186,
72.82228, 72.88871),
latitude = c(12.90524, 19.08120, 12.97238, 12.90927,
19.08225, 12.81447, 19.08241, 13.00984,
18.99347, 19.07990))
list2 <- data.frame(longitude = c(72.89537, 77.65094, 73.95325, 72.96746,
77.65058, 77.66715, 77.64214, 77.58415,
77.76180, 76.65460),
latitude = c(19.07726, 13.03902, 18.50330, 19.16764,
12.90871, 13.01693, 13.00954, 12.92079,
13.02212, 12.81447),
locality = c("A", "A", "B", "B", "C", "C", "C", "D", "D", "E"))
library(geosphere)
# create distance matrix
mat <- distm(list1[,c('longitude','latitude')], list2[,c('longitude','latitude')], fun=distHaversine)
# assign the name to the point in list1 based on shortest distance in the matrix
list1$locality <- list2$locality[max.col(-mat)]
如何使用bigmemory构建海量的dist矩阵?
如果这个项目是可行的,我怀疑它会像这样:创建并清空类型为double的大矩阵,它是您需要的大小(100M X 100M)或具有适当行数的3列矩阵。您可以在小插曲中看到使用所需文件后备将其保存到磁盘的示例。然后编写一个循环来填充它。在'biganalytics'包中或者'bigmemory'本身可能有一些有用的工具,但是你可能只需要求一个嵌套的for循环来填充矩阵。 – lmo
100M x 100M并不现实,100K x 100K已经占用74.5GB。 如果你只需要访问距离,你应该在线计算它们。尽管如此,我认为计算距离的“big.matrix”的最好方法是逐块计算它们作为标准R矩阵(只有下三角和对角线上的块)。 –
矩阵是100k + x 16.我有很多行 –