poly2nb函数需要太多时间来计算

时间:2019-05-10 11:57:46

标签: r polygon spatial

我有一个数据框,其中包含有关犯罪(变量x)以及犯罪发生地的纬度和经度的信息。我有一个与圣保罗市各区的形状文件。那是df:

 latitude  longitude  n_homdol
    1    -23.6     -46.6     1
    2    -23.6     -46.6     1
    3    -23.6     -46.6     1
    4    -23.6     -46.6     1
    5    -23.6     -46.6     1
    6    -23.6     -46.6     1

还有一个用于圣保罗地区的形状文件,sp.dist.sf:

                      geometry      NOME_DIST
1 POLYGON ((352436.9 7394174,... JOSE BONIFACIO
2 POLYGON ((320696.6 7383620,...    JD SAO LUIS
3 POLYGON ((349461.3 7397765,...    ARTUR ALVIM
4 POLYGON ((320731.1 7400615,...        JAGUARA
5 POLYGON ((338651 7392203, 3...  VILA PRUDENTE
6 POLYGON ((320606.2 7394439,...        JAGUARE

在@Humpelstielzchen的帮助下,我同时加入了这两个数据:

sf_df = st_as_sf(df, coords = c("longitude", "latitude"), crs = 4326)
shape_df<-st_join(sp.dist.sf, sf_df, join=st_contains)

我的最终目标是实现本地moran i统计信息,而我正在尝试通过以下方式做到这一点:

   sp_viz <- poly2nb(shape_df, row.names = shape_df$NOME_DIST)
    xy <- st_coordinates(shape_df)
    ww <- nb2listw(sp_viz, style ='W', zero.policy = TRUE)
    shape_df[is.na(shape_df)] <- 0
    locMoran <- localmoran(shape_df$n_homdol, ww)
sids.shade <- auto.shading(c(locMoran[,1],-locMoran[,1]),
                           cols=brewer.pal(5,"PRGn"))
    choropleth(shape_df, locMoran[,1], shading=sids.shade)
    choro.legend(-46.5, -20, sids.shade,fmt="%6.2f")
    title("Criminalidade (Local Moran's I)",cex.main=2)

但是当我运行代码时,需要花费数小时才能计算出

 sp_viz <- poly2nb(shape_df, row.names = shape_df$NOME_DIST)

我对93个区进行了15,000次观测。我只用100次观察就尝试运行上述代码,而且速度很快,一切正常。但是使用15,000 obs时,我看不到结果,因为计算将永远进行下去。可能会发生什么?我做错了吗?有没有更好的方法来测试我测试的本地mo鼠?

1 个答案:

答案 0 :(得分:0)

由于我不能只发表评论,因此有人可能会问一些问题:  -您要禁食多久?我的某些脚本可以在几秒钟内运行,我称它很慢。  -您所有的观察都一样吗?也许poly2nb()函数在具有罕见结构的项目上无限循环。您可以使用unique()函数来确保这一点。  -您是否尝试将数据集分成多个部分并分别运行?这将有助于查看1 /您的部件之一是否有待纠正的内容,以及2 / R是否同时加载所有数据,从而使计算机的内存过载。当心,这种情况实际上经常发生在R中的巨大数据集上(而且巨大的意思是数据表的重量大于50 Mo)。

很高兴为您提供帮助,请随时质疑我的答案!