[R] %+=% and eval.parent()
Duncan Murdoch
dmurdoch at pair.com
Tue Apr 6 14:59:38 CEST 2004
On Tue, 6 Apr 2004 13:36:32 +0000, Robin Hankin <rksh at soc.soton.ac.uk>
wrote :
> the following caught me off-guard:
>
>
>R> a <- matrix(1:9,3,3)
>R> a[a%%2==1] %+=% 1000*(1:5)
>[1] 1001 2006 3015 4028 5045
>R> a
> [,1] [,2] [,3]
>[1,] 1001 4 1007
>[2,] 2 1005 8
>[3,] 1003 6 1009
>R>
>
>Why the difference when I remove the brackets?
Looks to me like an operator precedence issue. Your line is
equivalent to
(a[a%%2==1] %+=% 1000)*(1:5)
This is described in the Language Manual, in Parser | Expressions |
Infix and prefix operators (section 10.4.2 in the PDF version). The
user defined %xyz% operators have precedence just above * and /.
>And how is the vector that is printed in the unbracketed version determined?
>(why is this printed anyway? doing "a[a%%2==1] %+=% 1000" doesnt
>print anything).
>
>Is there a better way to code up %+=% ?
Not really. You can't control operator precedence in R.
Duncan Murdoch
More information about the R-help
mailing list