首页 文章

将SpatialPointsDataFrame与SpatialPolygonsDataFrame组合错误:超出最大返回密集矩阵大小

提问于
浏览
1

我试图在SpatialPolygonsDataFrame(info)上组合一个1000x1000m正方形的SpatialPointsDataFrame(网格)来聚合每个网格方块内的点的所有信息 .

我试过代码:

combined <- intersect(info, grid)

但我记得这个错误:

Error in RGEOSBinPredFunc(spgeom1, spgeom2, byid, func) : 
  rgeos_binpredfunc_prepared: maximum returned dense matrix size exceeded

还有其他方法可以做我想要的或解决错误吗?

1 回答

  • 3

    该错误表明您的记忆力最大化 . 一种解决方案是分解数据集并以块的形式进行交叉 . 新的 SF 包使用dplyr动词更容易做到这一点 . 添加列以定义块,然后尝试以下操作:

    combined <- info %>%
        group_by(chuncks) %>%
        do(sf::st_intersection(., grid))
    

    为了加快处理速度,您还可以尝试将数据集拆分为一个chuncks列表,然后并行应用 st_intersection 函数 . 这要快得多 .

    #import packages
    library(foreach)
    library(doParallel)
    
    #setup parallel backend to use 8 processors
    cl<-makeCluster(4)
    registerDoParallel(cl)
    
    tmp <- split(info, info$chunks)
    
    # run using foreach
    by.chunk <- foreach(df = tmp) %dopar% {
        sf::st_intersection(df, grid)
    }
    
    # combine list of data.frames 
    combined <- ldply(by.chunck
    

相关问题