我有一个名为location
的矩阵对象,有三列(ID
,latitude
,logitude
)和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的矢量。
我的问题是:
ff
矩阵对象赋值的代码是错误的吗?我应该使用特殊的东西来为ff
对象赋值吗? ff
个对象可以处理存储要求吗? distm()
产生的矩阵是所需的两倍,因为它是对称的。 bigmemory
包似乎无法在我的Windows计算机上运行。