【发布时间】:2017-05-24 11:00:35
【问题描述】:
我在 R 中遇到了导致程序崩溃的问题。我终于能够将问题缩小到以下范围。
我发现以下工作:
library(rgeos)
x = readWKT("POLYGON ((0 0, 0 10, 10 10, 10 0, 0 0))")
gIsValid(x)
[1] TRUE
但是,以下情况会导致崩溃:
library(rgdal)
x = rgeos::readWKT("POLYGON ((0 0, 0 10, 10 10, 10 0, 0 0))")
rgeos::gIsValid(x)
在我正在处理的 R 包中,rgdal 在描述文件的“依赖”下指定,rgeos 在“导入”下指定。所以我的代码表现得更像第二种(崩溃)场景。
以下是一些可能有用的信息:
> library(rgeos)
rgeos version: 0.3-23, (SVN revision 546)
GEOS runtime version: 3.6.1-CAPI-1.10.1 r0
Linking to sp version: 1.2-4
Polygon checking: TRUE
> library(rgdal)
Loading required package: sp
rgdal: version: 1.2-7, (SVN revision 660)
Geospatial Data Abstraction Library extensions to R successfully loaded
Loaded GDAL runtime: GDAL 1.11.5, released 2016/07/01
Path to GDAL shared files: /usr/local/Cellar/gdal/1.11.5_2/share/gdal
Loaded PROJ.4 runtime: Rel. 4.9.3, 15 August 2016, [PJ_VERSION: 493]
Path to PROJ.4 shared files: (autodetected)
Linking to sp version: 1.2-4
> sessionInfo()
R version 3.4.0 (2017-04-21)
Platform: x86_64-apple-darwin15.6.0 (64-bit)
Running under: macOS Sierra 10.12.5
Matrix products: default
BLAS: /Library/Frameworks/R.framework/Versions/3.4/Resources/lib/libRblas.0.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/3.4/Resources/lib/libRlapack.dylib
locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] rgdal_1.2-7 sp_1.2-4 rgeos_0.3-23
loaded via a namespace (and not attached):
[1] compiler_3.4.0 grid_3.4.0 lattice_0.20-35
关于如何避免这种情况的任何想法?这是geos中的错误吗?格达尔?
【问题讨论】:
-
你是像上面那样喂它一个小集合还是要运行一大堆点?
-
我在提供具有更多顶点的多边形时发现了相同的行为,如果这就是您的意思的话。
-
解决方法当然是先加载 rgeos 包。
-
是的,我会建议先加载
rgeos。它真的不应该只是崩溃,但如果它占用了大量内存并且 R 觉得需要在它工作时创建 mondo 数据集的多个副本,我可以看到可能有问题,但我从来没有这发生在我自己身上,我在具有大量 RAM 和 8 个内核的同一版本的 Sierra 上使用 Darwin。 -
是的,它与示例中所示的小型数据集一起崩溃,因此似乎不是内存过载。