如何以适当的方式分配一个巨大的距离矩阵,以避免“分配 无法“错误。想象一下你有一个随机扩散的100.000分 空间。如何巧妙地创建一个矩阵或“dist” - 对象,它代表了 DistMatrix的一半。也许它应该是另一个对象,它将能够有效地分配大量的距离。
您可以从以下链接获取多边形对象: https://www.dropbox.com/sh/65c3rke0gi4d8pb/LAKJWhwm-l
# Load required packages
library(sp)
library(maptools)
library(maps)
# Load the polygonal object
x <- readShapePoly("vg250_gem.shp")
# Sample or Pick up a large Number of Points
# this command needs some minutes to be done.
# "coord" is SpatialPoints Object
n <- 1e5
coord <- spsample(x, n, "random")
# Try to measure the distances by dist()
DistMatrix <- dist(coord@coords)
Error: negative length vectors are not allowed
# Try to measure the distances by spDists()
DistMatrix <- spDists(coord)
Error: cannot allocate vector of size (some number) MB
# It seems that the problem lies on large matrix to be created.
对于大量的“n”,这个问题在R中是如何解决的。
答案 0 :(得分:0)
此时R无法分配随机数的兆字节RAM。此时,您的计算机正在其他地方使用其所有内存,并且没有(某些数量)MBytes可供您的进程继续使用。此时您有几种解决方案。其中,获得具有更多RAM,关闭程序或以较小批量进行距离计算的机器。尝试更小的n;当它工作时,只需重复几次,直到你拥有整个距离矩阵。