On Tue, 18 Jan 2005, Peter Muhlberger wrote:
I'm used to statistical languages, such as Stata, in which it's trivial to pass a list of variables to a function & have that function modify those variables in the existing dataset rather than create copies of the variables or having to replace the entire dataset to change a few variables. In R, I suppose I could paste together the right instructions in a function and then execute it, but is there any more straightforward way of doing this I'm missing?
Yes and no.
This isn't so much a question of pass-by-reference, as one reply suggested, but of macros vs functions.
Stata is (largely) a macro language: it does operations on command strings and then evaluates them. It's not that Stata programs work with references, it's that all objects (except local macros) are global.
R is based on functions: it evaluates arguments and then operates on them. When you have functions, with local variables, it then becomes relevant to ask whether the arguments to the function are just copies or are references to the real thing. In R they are just copies (from a language point of view) but are often references from an efficiency point of view.
There are two ways to get the effect you are looking for. I don't recommend either, though.
1) Store your variables in an environment, rather than a data frame. Environments are passed by reference.
2) The right combinations of eval() and substitute() and lazy evaluation make it possible to write macros in R. There's an R Newsletter article about this.
-thomas
______________________________________________ [email protected] mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
