# [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...
> # 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

```