[R] Lexical scoping is not what I expect

Rui Barradas ruipbarradas at sapo.pt
Mon Jun 24 22:40:47 CEST 2013


The object 'a' exists if function f() not in the global environment 
where g() is defined. R is in fact going up, but to the global 
environment and not finding 'a'. Try, as an example, the following.

f <- function(x) {
	g <- function(y) { y + a }
	a <- 5

f(2)  # 7

Now R is finding 'a'. Because g() exists in the environment of f() (like 
'a' does.)

Hope this helps,

Rui Barradas

Em 24-06-2013 21:27, David Kulp escreveu:
> According to http://cran.r-project.org/doc/contrib/Fox-Companion/appendix-scope.pdf and other examples online, I am to believe that R resolves variables using lexical scoping by following the frames up the call stack.  However, that's not working for me.  For example, the following code, taken from the reference above fails instead of returning 7.  What am I doing wrong?  Thanks!
> f <- function(x) { a<-5; g(x) }
> g <- function(y) { y + a }
> f(2)
> Error in g(x) : object 'a' not found
> 	[[alternative HTML version deleted]]
> ______________________________________________
> R-help at 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.

More information about the R-help mailing list