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 ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.