[R] function that uses a variable name as the parameter

William Dunlap wdunlap at tibco.com
Thu Nov 13 19:51:42 CET 2008


On 12/11/2008 7:59 AM, David Croll wrote:
> 
> Hello dear R people!
> 
> 
> Several times it occurred to me that a function that uses a variable
name as a parameter would be helpful, but I did not find out how to
write such a function. I have experience in several programming
language, but I did not come across a helpful trick...
> 
> What I want to have is...
> a <- 12 # starting value
> add <- function(variable,increment) {
>    variable <- variable + increment
> }
> 
> # by typing a and 25 for example, you specify that 25 will be added to
the variable a...
> add(a,25)
> # the new a equals 12 + 25 = 37
> 
> Thanks for all the help - I'll try to give my advice when I get across
a problem I can solve!

To do this with normal looking S syntax and semantics (no dynamic
scoping)
you could use a 'replacement function' (is there a better standard term
for that?).
E.g.,

`incrementBy<-` <- function(x, value) {
   x <- x + value
   x
}

Use it as
  > a<-17
  > incrementBy(a) <- 25
  > a
  [1] 42
Note how it is clear from the usage 'a' is being changed, since
it is on the left side of the assignment.

Usually replacement functions have a non-replacement analog which
does roughly the inverse of the replacement, but I'm not sure if
that would make sense here.  You could write a log<- function that
is the inverse of the log function

 `log<-` <- function(x, base = exp(1), value) {
      x[] <- base ^ value
      x
 }

and combine it with incrementBy to increment on a log scale.  E.g.

  > x<-66:68
  > incrementBy(log(x,base=10)) <- 2  # increment log(x,10) by 2 =>
multiply x by 100
  > x
  [1] 6600 6700 6800

Bill Dunlap
TIBCO Spotfire Inc
wdunlap tibco.com 



More information about the R-help mailing list