将值赋给R中的大矩阵

时间:2014-10-09 01:36:30

标签: r latitude-longitude apply ff

我有一个名为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)
      4:矩阵(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. 我可以使用其他方法使用不涉及循环的apply函数来计算距离吗?我知道函数distm()产生的矩阵是所需的两倍,因为它是对称的。
  4. 有没有其他方法可以处理大数据? bigmemory包似乎无法在我的Windows计算机上运行。

0 个答案:

没有答案