[R] %+=% and eval.parent()

Duncan Murdoch dmurdoch at pair.com
Wed Apr 7 15:16:52 CEST 2004

On 07 Apr 2004 13:51:52 +0200, Peter Dalgaard
<p.dalgaard at biostat.ku.dk> wrote :

>Duncan Murdoch <dmurdoch at pair.com> writes:

>> Wouldn't a clearer syntax to follow be Pascal's?  I.e.

>> inc(x[3], 1)
>But that's not kosher in functional programming languages where you
>expect function calls not to modify their arguments, is it? (OK, so
>assignment is also a function call as is setq in Lisp, but we have
>syntactic sugar to cover that. That's what was nice about %<-%.)

I think this whole discussion is aiming for ways around functional
programming.  I think if you're going to do that, you should be clear
about it.

We can't create an operator %+=% (that's what you meant, isn't it?)
that parses like += in C or <- in R, because of limitations in R

We can create assignment functions, but they don't read properly.  The
meaning I'd read for 

 plus(x) <- 3

would be "Set the plus feature of x to 3", and then I'd say "What's
the plus of x???"  Your 

 +x <- 3

is just as obscure.

Personally, I'd generally prefer 

 x <- x + 3

(because functional programming is good), but I can understand the
desire to avoid repeating a complicated indexing construction in order
to improve the clarity of code.  I just don't think that

 plus(x[blah1, blah2, blah3]) <- 2

is clearer than

 x[blah1, blah2, blah3] <- x[blah1, blah2, blah3] + 2

(because nothing is getting set to 2!), whereas 

 inc(x[blah1, blah2, blah3], 2)

is reasonably clear.

If this is about efficiency rather than clarity, I think that's a bad

Duncan Murdoch

More information about the R-help mailing list