[R] Trying to learn how to write a function... can't define a variable??
David Winsemius
dwinsemius at comcast.net
Fri Sep 7 22:34:32 CEST 2012
On Sep 7, 2012, at 11:00 AM, wwreith wrote:
> I am just starting to experiment with writing a function and have run into
> what seems like a limitation or more likely a lack of understanding on my
> part.
>
> Very Simple Example: I want to define a function that does 1+1=2.
>
> z<-1
> ADD<-function(x)
> {
> x<-x+1
> }
> ADD(z)
> z
> output for z is 1 not the expected 2.
>
> Now if I were to do print(x+1) instead of x<-x+1 it does return 2, so the
> function seems ok with x+1, but not ok with x<-. Is there a way to define a
> variable inside a function or am I violating some rule that I don't know
> about?
The rule you are violating is failing to assign the calculated value in the proper environment. The x=1 value exists inside the function and _is_ returned, but you didn't do anything with it, so it has no name and will get garbage collected. Here's an incrementer function that works:
ADD <- function(x) assign( deparse(substitute(x)), x+1, envir=parent.frame() )
x=1
ADD(x)
x
#[1] 2
You could also have written it thusly:
ADD <- function(x) x <<- x+1 )
(But that operator is frowned upon by those in the know.)
I'm not sure what sort of reaction would be provoked by:
ADD <- function(x) { eval.parent(substitute(x <- x + 1)) }
The data.table package does in-memory alterations in its objects using a database model. It is often much faster than reassignment of dataframes to them self or even adding a columns, which does require making a copy (or maybe even two) of the entire object.
--
David Winsemius, MD
Alameda, CA, USA
More information about the R-help
mailing list