[R-sig-Geo] spatstat crashes R when converting tess to sp objects

Roger Bivand Roger.Bivand at nhh.no
Mon Oct 29 13:05:03 CET 2012


On Mon, 29 Oct 2012, O'Hanlon, Simon J wrote:

> Further to this problem, I have experienced some more odd behaviour with 
> the coercion from tess to sp.
>
> My real dataset is 3607 points within the observation window. If I try 
> and run this straight away I get a segfault crash with the error 
> message:
>
> *** caught segfault ***
> address 0x0, cause 'memory not mapped'
>
> Traceback:
> 1: .Call("Polygons_c", srl, ID, PACKAGE = "sp")
> 2: Polygons(pieces, id)
> 3: owin2Polygons(y[[i]], nam[i])
> 4: as.SpatialPolygons.tess(from)
> 5: asMethod(object)
> 6: as(v, "SpatialPolygons")
>
> This is using the spatstat.options(gpclib=T) workaround posted by Roger. 
> However if I take a small sample of say 50 rows from the dataset, run 
> the script on these and coerce from tess to sp it runs fine. 
> Interestingly I can then re-read the data file and run the analysis on 
> all 3607 points within the same R session and corece to sp with no 
> problems at all. However it crashes every time if I don't 'prime' the 
> function with a small run dataset first?!
>
> I can try to provide a reproducible example if that will help more? (the 
> easiest way is if I can share my datapoint locations, but I have to ask 
> permission first). Otherwise I will try to recreate this from within R.

Yes, the specific failing data set is the best bet; if passed through an 
off-list communication, it can be handled with discretion. Could you also 
perhaps update sp from R-Forge if you can install a source package (you'll 
need to check out from anonymous SVN, see this page:

https://r-forge.r-project.org/scm/?group_id=1014

or if you like I can get a Windows binary package run up on Win-builder.

I do see that with the patched sp, and points generated by:

set.seed(1)
p <- coordinates(spsample(africa, type="random", n=3500))
spatstat.options("gpclib"=TRUE)

the result is OK, but for some other seeds, a degenerate pieces is created 
and I see:

> vp <- as( v , "SpatialPolygons" )
Error: length(srl) > 0 is not TRUE

So the revised sp would trap the error, I think. However, it would be 
useful to debug this as far as possible.

Roger

>
> Thanks,
>
> Simon
>
> ________________________________________
> From: Roger Bivand [Roger.Bivand at nhh.no]
> Sent: 28 October 2012 13:43
> To: O'Hanlon, Simon J
> Cc: Barry Rowlingson; r-sig-geo at r-project.org
> Subject: RE: [R-sig-Geo] spatstat crashes R when converting tess to sp objects
>
> On Sun, 28 Oct 2012, O'Hanlon, Simon J wrote:
>
>> Dear Roger and Barry,
>> Thank you so much for your, as ever, lightening fast responses. This is
>> one of the many reasons why I love using R as a platform so much. That
>> workaround has solved the issue for me now.
>
> Simon,
>
> With a good reproducible example available, life is much easier, and in
> fact this was a real crash, so sp will be improved (made safer) thanks to
> your posting. Making things work better is shared, really, as this case
> shows.
>
> Roger
>
>>
>> Many, many thanks,
>>
>> Simon
>> ________________________________________
>> From: Roger Bivand [Roger.Bivand at nhh.no]
>> Sent: 28 October 2012 13:30
>> To: Barry Rowlingson
>> Cc: O'Hanlon, Simon J; r-sig-geo at r-project.org
>> Subject: Re: [R-sig-Geo] spatstat crashes R when converting tess to sp objects
>>
>> On Sun, 28 Oct 2012, Barry Rowlingson wrote:
>>
>>> On Sun, Oct 28, 2012 at 12:22 PM, O'Hanlon, Simon J
>>> <simon.ohanlon at imperial.ac.uk> wrote:
>>>> Dear list,
>>>
>>>> #Reproducible example
>>>
>>> I think maptools isn't coping with certain types of tess object. I
>>> can reproduce this in three lines without needing a download :)
>>
>> I'm seeing:
>>
>> Warning message:
>> In as.polygonal(x) :
>>   Can't convert mask to polygon: gpclib is disabled/unavailable
>>
>> called in maptools:::owin2Polygons:
>>
>> x <- as.polygonal(x)
>>
>> where x is an element of the list y made from the tesselation in
>> maptools:::as.SpatialPolygons.tess by
>>
>> y <- tiles(x)
>>
>> Since as.polygonal(x) fails, x$bdry is NULL, and pieces is an empty
>> list. I've patched sp:::Polygons() to trap the empty list on R-Forge, so
>> that the user will see (using the current status of rspatial/sp on
>> R-Forge):
>>
>>> vp <- as( v , "SpatialPolygons" )
>> Error: length(srl) > 0 is not TRUE
>> In addition: Warning message:
>> In as.polygonal(x) :
>>   Can't convert mask to polygon: gpclib is disabled/unavailable
>>
>> The resolution for now is:
>>
>> spatstat.options("gpclib"=TRUE)
>>
>> letting as.polygonal() do its stuff for a W$type "mask" tesselation. Not
>> great, but it works; conversion to rgeos from gpclib might also work
>> using the wrappers for gpclib objects included in rgeos.
>>
>> Roger
>>
>>
>>>
>>> 1, start R, use some packages:
>>>
>>> $ R --vanilla
>>>
>>> R version 2.15.1 (2012-06-22) -- "Roasted Marshmallows"
>>> Copyright (C) 2012 The R Foundation for Statistical Computing
>>> ISBN 3-900051-07-0
>>> Platform: i486-pc-linux-gnu (32-bit)
>>>
>>> R is free software and comes with ABSOLUTELY NO WARRANTY.
>>> You are welcome to redistribute it under certain conditions.
>>> Type 'license()' or 'licence()' for distribution details.
>>>
>>>  Natural language support but running in an English locale
>>>
>>> R is a collaborative project with many contributors.
>>> Type 'contributors()' for more information and
>>> 'citation()' on how to cite R or R packages in publications.
>>>
>>> Type 'demo()' for some demos, 'help()' for on-line help, or
>>> 'help.start()' for an HTML browser interface to help.
>>> Type 'q()' to quit R.
>>>
>>>> library(spatstat)
>>> Loading required package: mgcv
>>> This is mgcv 1.7-21. For overview type 'help("mgcv-package")'.
>>> Loading required package: deldir
>>> deldir 0.0-20
>>> spatstat 1.28-2
>>> Type ‘help(spatstat)’ for an overview of spatstat
>>>     ‘latest.news()’ for news on latest version
>>>     ‘licence.polygons()’ for licence information on polygon calculations
>>>
>>> 2. Run this to create some objects:
>>>
>>>> example(tess)
>>>
>>> tess>   A <- tess(xgrid=0:4,ygrid=0:4)
>>>
>>> tess>   A
>>> Tessellation
>>> Tiles are equal rectangles, of dimension 1 x 1 units
>>> 4 by 4 grid of tiles
>>> window: rectangle = [0, 4] x [0, 4] units
>>>
>>> tess>   B <- A[c(1, 2, 5, 7, 9)]
>>>
>>> tess>   B
>>> Tessellation
>>> Tessellation is determined by a factor-valued image with 5 levels
>>> window: binary image mask
>>> 384 x 192 pixel array (ny, nx)
>>> enclosing rectangle: [0, 3] x [1, 4] units
>>>
>>> tess>   v <- as.im(function(x,y){factor(round(5 * (x^2 + y^2)))}, W=owin())
>>>
>>> tess>   levels(v) <- letters[seq(length(levels(v)))]
>>>
>>> tess>   E <- tess(image=v)
>>>
>>> tess>   E
>>> Tessellation
>>> Tessellation is determined by a factor-valued image with 11 levels
>>> window: binary image mask
>>> 128 x 128 pixel array (ny, nx)
>>> enclosing rectangle: [0, 1] x [0, 1] units
>>>
>>> 3. Try conversion:
>>>
>>>> as(E,"SpatialPolygons")
>>> Error in as(E, "SpatialPolygons") :
>>>  no method or default for coercing "tess" to "SpatialPolygons"
>>>
>>> 4. Try conversion with maptools:
>>>
>>>> library(maptools)
>>> Loading required package: foreign
>>> Loading required package: sp
>>> Loading required package: lattice
>>> Checking rgeos availability: TRUE
>>>> as(E,"SpatialPolygons")
>>>
>>> *** caught segfault ***
>>> address (nil), cause 'memory not mapped'
>>>
>>> I've not looked at the maptools code, but the tess object can be one
>>> of three types according to ?tess, and I bet the conversion code
>>> doesn't check what its dealing with...
>>>
>>> Barry
>>>
>>> _______________________________________________
>>> R-sig-Geo mailing list
>>> R-sig-Geo at r-project.org
>>> https://stat.ethz.ch/mailman/listinfo/r-sig-geo
>>>
>>
>> --
>> Roger Bivand
>> Department of Economics, NHH Norwegian School of Economics,
>> Helleveien 30, N-5045 Bergen, Norway.
>> voice: +47 55 95 93 55; fax +47 55 95 95 43
>> e-mail: Roger.Bivand at nhh.no
>
> --
> Roger Bivand
> Department of Economics, NHH Norwegian School of Economics,
> Helleveien 30, N-5045 Bergen, Norway.
> voice: +47 55 95 93 55; fax +47 55 95 95 43
> e-mail: Roger.Bivand at nhh.no

-- 
Roger Bivand
Department of Economics, NHH Norwegian School of Economics,
Helleveien 30, N-5045 Bergen, Norway.
voice: +47 55 95 93 55; fax +47 55 95 95 43
e-mail: Roger.Bivand at nhh.no


More information about the R-sig-Geo mailing list