On 7 Apr 2004, Peter Dalgaard wrote: > Robin Hankin <[EMAIL PROTECTED]> writes: > > > Hi again everybody. > > > > Yesterday I had a problem with c-style "+=" functions. One suggestion > > was to define > > > > R> "plus<-" <- function(x,value){x+value} > > > > Then > > > > R> a <- matrix(1:9,3,3) > > R> plus(a[a%%2==1]) <- 1000 > > > > works as desired. > > > > > > QUESTION: why does this behave differently: > > > > > > R> "plus<-" <- function(x,y){x+y} > > R> a <- matrix(1:9,3,3) > > > > R> plus(a[a%%2==1]) <- 1000 > > Error in "plus<-"(`*tmp*`, value = 1000) : > > unused argument(s) (value ...) > > R> > > > > The only change seems to be changing the second argument from "value" > > to "y". Why does this affect anything? Where do I look for > > documentation on things like "plus<-" ? > > These assignment functions work basically by > > plus(x) <- foo > > getting internally transcribed as > > x <- "plus<-"(x, value=foo) > > (actually, there's an intermediate alias for the target to avoid > multiple evaluation; this is what shows up as *tmp*, but you're not > supposed to know that...) > > The use of the keyword matching form was prompted by some problems > with indexing functions that take a variable number of indices in > addition to x. (Think "[<-"(x,i,value) vs. "[<-"(x,i,j,value) and the > hoops you have to jump through when the value gets passed in the j > argument.) However, keyword matching of course implies that you need > to use the matching keyword in the function definition. > > This *should* be somewhere in the R Language Definition, although I'm > not sure it is actually there. Or the blue book, although I suspect > that S v.3 actually used positional matching (and jumped through > hoops).
It did. This is in the FAQ, 3.2.3: * In R, the argument of a replacement function which corresponds to the right hand side must be named `value'. E.g., `f(a) <- b' is evaluated as `a <- "f<-"(a, value = b)'. S always takes the last argument, irrespective of its name. I seem to recall I discovered the discrepancy in ca 1998. R-lang is minimalist about what it calls `assignment functions', most of the time. -- Brian D. Ripley, [EMAIL PROTECTED] Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/ University of Oxford, Tel: +44 1865 272861 (self) 1 South Parks Road, +44 1865 272866 (PA) Oxford OX1 3TG, UK Fax: +44 1865 272595 ______________________________________________ [EMAIL PROTECTED] mailing list https://www.stat.math.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html