[R-sig-Geo] SpatialGrid from matrix
Edzer J. Pebesma
e.pebesma at geo.uu.nl
Tue Mar 14 10:38:44 CET 2006
Michael Sumner wrote:
>>require(splancs)
>>data(bodmin)
>>x= kernel2d(as.points(bodmin), bodmin$poly, h0=2, nx=100, ny=100)
>>require(sp)
>>g=expand.grid(x$x,x$y,x$z)
>>
>>The last line gives the following error:
>>Error: cannot allocate vector of size 390625 Kb
>>
>>
>>
>
>You are expanding your grid for every cell in the matrix, per every grid
>location - which *really is* a lot of memory. You really want something
>like this:
>
>g <- cbind(expand.grid(x = x$x, y = x$y), as.vector(x$z))
>coordinates(g) <- c("x", "y")
>gridded(g) <- TRUE
>image(g)
>contour(x, add = T) ## just to be sure
>
>I'm pretty sure the ordering is right for this case, but be sure to check.
>
>Cheers, Mike.
>
>_______________________________________________
>R-sig-Geo mailing list
>R-sig-Geo at stat.math.ethz.ch
>https://stat.ethz.ch/mailman/listinfo/r-sig-geo
>
>
Thanks, Mike, that's an excellent solution.
In this way g is of
> class(g)
[1] "SpatialPixelsDataFrame"
attr(,"package")
[1] "sp"
meaning that it stores x and y coordinates. To save this
space, you could store it as SpatialGridDataFrame:
> object.size(g)
[1] 283528
> fullgrid(g)=T
> object.size(g)
[1] 83476
> class(g)
[1] "SpatialGridDataFrame"
attr(,"package")
[1] "sp"
A direct way to create a SpatialGridDataFrame without
using expand.grid() would use GridTopology() and
SpatialGridDataFrame(). You'd have to reorder x$z
for that, too.
--
Edzer
More information about the R-sig-Geo
mailing list