2

我有一个名为 的矩阵对象,location它具有三列(IDlatitudelogitude)和 18,289 行:

#      ID    latitude     longitude  
#  320503    31.29530     120.5735  
#  310104    31.18852     121.4365  
#  310115    31.22152     121.5444  
#  110105    39.92147     116.4431  

我想计算每个 ID 之间的 Haversine 距离。包geosphere中的函数distm()可以创建对称距离矩阵,但是它的维度是18289乘18289。但是,R报告了它的错误cannot allocate vector of size 2.5 Gb

同样,对于ff包,

data.distance.ff <- ff(0, dim = c(18289, 18289))

ff不会产生错误,但是当我为矩阵赋值时,R又会产生错误。

data.distance.ff[1:18289, 1:18289] <- distm(location[, 2:3] 

错误:无法分配大小为 2.5 Gb 的向量
另外:警告消息:
1:在矩阵中(0,ncol = n,nrow = n):
达到 2047Mb 的总分配:请参阅帮助(memory.size)
2:在矩阵中(0 , ncol = n, nrow = n) :
达到 2047Mb 的总分配:参见帮助(memory.size)
3:在矩阵中(0,ncol = n,nrow = n):
达到 2047Mb 的总分配:参见帮助(memory.size) size)
4: In matrix(0, ncol = n, nrow = n) :
达到 2047Mb 的总分配: 见帮助(memory.size)

我可以通过以下方式验证此错误:

data.distance.ff[1:10000, 1:10000] <- distm(location[1:10000, 2:3] 

然后得到这个错误:

错误:无法分配大小为 772.1 Mb 的向量。

我的问题是:

  1. ff我为矩阵对象赋值的代码是否错误?ff我应该使用特殊的东西来为对象 赋值吗?
  2. 对象可以ff处理存储需求吗?
  3. 我可以使用不涉及循环的应用函数使用另一种方法来计算距离吗?我知道该函数distm()产生的矩阵是需要的两倍大,因为它是对称的。
  4. 还有其他处理大数据的方法吗?该bigmemory软件包似乎无法在我的 Windows 计算机上运行。
4

0 回答 0