我使用以下代码将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是我正在阅读的行数据。任何帮助都会很棒。感谢。
答案 0 :(得分:2)
简短的回答:你的数据集很大;在最后一行设置参数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
。