[R-sig-Geo] map algebra with ascii grid
Agustin Lobo
Agustin.Lobo at ija.csic.es
Sun Jul 15 18:03:15 CEST 2007
Roger,
I think that having Arithmetic operations defined for
SpatialGridDataFrame objects would be very useful.
May be I'm missing something, but the argument that "columns of the data
frame (here a single column) may contain data of different classes" does
not seem a valid one to me, as
this is the case for any dataframe object in R while arithmetic
operations are
defined for them, just yielding the proper results and warnigs,i.e.:
> d <- data.frame(cbind(x=1, y=1:10), fac=sample(L3, 10, repl=TRUE))
x y fac
1 1 1 C
2 1 2 A
3 1 3 A
4 1 4 A
5 1 5 A
6 1 6 A
7 1 7 A
8 1 8 C
9 1 9 A
10 1 10 C
> d+3
x y fac
1 4 4 NA
2 4 5 NA
3 4 6 NA
4 4 7 NA
5 4 8 NA
6 4 9 NA
7 4 10 NA
8 4 11 NA
9 4 12 NA
10 4 13 NA
Warning message:
+ not meaningful for factors in: Ops.factor(left, right)
So I would be most happy with such a feature added to spatial objects.
The "solution" of using other tools (i.e., python, cf. message by
Philip, but this can also be done with grass and many other GIS) is not
optimal at all, as we keep having copies of the same information in
different formats for different tools.
Agus
Roger Bivand escribió:
> On Sat, 14 Jul 2007, Michal Gallay wrote:
>
>> Dear R Users,
>>
>> could you please advise me on doing map algebra with spatial grids? It's
>> the first time I am using spatial objects in R. I have imported an ascii
>> grid file and wanted to round the values in it or sum with a value, but it
>> gives an error message:
>>
>>> require(maptools)
>>> x <- readAsciiGrid(fname="xxxx.asc")
>>> x+3
>> Error in x + 3 : non-numeric argument to binary operator
>>> round(x,2)
>> Error in round(x, digits) : Non-numeric argument to mathematical function
>>
>
> Arithmetic operations are not defined for SpatialGridDataFrame operations,
> as the columns of the data frame (here a single column) may contain data
> of different classes. Do the operations on the columns directly:
>
> names(x)
>
> If there is a column called "band1", then
>
> x$band1 + 3
>
> will print "band1" + 3, and
>
> x$band1 <- x$band1 + 3
>
> will add 3 to the "band1" column. Think what would happen if band1 was
> categorical or logical to see why doing arithmetic directly isn't such a
> good idea.
>
> Hope this helps,
>
> Roger
>
>> Thank you for any suggestions.
>>
>> Best wishes,
>>
>> Michal
>>
>>
>>
>>
>
--
Dr. Agustin Lobo
Institut de Ciencies de la Terra "Jaume Almera" (CSIC)
LLuis Sole Sabaris s/n
08028 Barcelona
Spain
Tel. 34 934095410
Fax. 34 934110012
email: Agustin.Lobo at ija.csic.es
http://www.ija.csic.es/gt/obster
More information about the R-sig-Geo
mailing list