as.linnet 函数导致挂机

as.linnet function causes to hang the machine

我正在使用以下代码将 shapefile 读取为 linnet 对象,在我使用 as.linnet 的最后一行中,进程挂起,我不得不强制退出 Rstudio,我不知道怎么了?我在 CRAN 和 github 上尝试了这两个包,但结果相同:Rstudio 挂起。

library(spatstat)
library(maptools)
library(sp)
setwd("~/documents/rwork/traced")
roads<-readShapeSpatial('NLroads')
spatstat.roads<-as.psp(roads)
#when I do head(spatstat.roads), it gives me only 5 line segments
#while the shapefile has 174 line segments
plot(spatstat.roads)
final_roads<-as.linnet(spatstat.roads)

我不知道是不是我的 shapefile 有问题?我也不知道这是什么意思:

In as.psp.SpatialLinesDataFrame(roads) : 1 columns of data frame discarded

here 是我正在读取的行数据。任何帮助都会很棒。谢谢

简短的回答:你的数据集很大;在最后一行设置参数 sparse=TRUE,给计算机几分钟。

长答案:SpatialLines 对象基本上是一系列曲线,每条曲线由一系列直线段组成。您的数据集 roads 有 174 条 曲线 ,总共由 38635 条直线段组成(因此每条曲线平均有超过 200 条线段)。当你做 as.psp(roads) 时,你只提取直线段,所以有 38635 个(如果你键入对象的名称,这将被打印出来,或者你可以使用 nsegments 来计算它们).当您键入 head(spatstat.roads) 时,您只会获得前 5 个条目。

您的数据集是一个 SpatialLinesDataFrame,其中每条曲线都带有附加数据。 as.psp 目前忽略了这些额外的数据列,因此它会发出一条警告,说明它已忽略它们。如果你需要它们,你可以从原始对象中提取它们。

命令as.linnet(spatstat.roads)调用函数as.linnet.psp。这会尝试猜测您打算将哪些线段加入线性网络。它通过查找两个不同段具有相同端点或非常接近的端点的情况来实现这一点。参数 eps 控制接近阈值。更重要的是,参数 sparse 决定是否使用网络拓扑的稀疏矩阵表示。对于这种大小的数据集,您肯定需要稀疏矩阵,因此设置 sparse=TRUE.