2017-07-16 6 views
0

SpatialPolygonsDataFrame(情報)に1000x1000mのSpatialPointsDataFrame(グリッド)を組み合わせて、各グリッドスクエア内のポイントのすべての情報を集約しようとしています。SpatialPointsDataFrameとSpatialPolygonsDataFrameを組み合わせるエラー:最大返される高密度マトリックスのサイズを超えました

私はコードを試してみました:

combined <- intersect(info, grid)

をしかし、私はこのエラーをrecive:

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

は私がやりたいか、エラーを解決するためにanotherwayはありますか?

答えて

1

このエラーは、メモリを使い果たしていることを示しています。 1つの解決策は、データセットを分割し、交差をチャンクで行うことです。新しい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 
関連する問題