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