[R] Scoping and nls.

Rolf Turner rolf at math.unb.ca
Tue Oct 26 00:42:33 CEST 2004


A colleague of mine is trying to use nls() to effect an optimization,
and is encountering a scoping problem.  I should know how to solve it
for him but .... well, I just don't.

I also had a quick scrounge of the archives --- I know I've seen this
topic addressed before --- but I couldn't track it down.

So here's a toy example that demonstrates the problem:

hhh <- function(y,x) {
        g <- function(a,b,x) {1/(1+a^2 + b^2*exp(x))}
        nls(y~g(a,b,x),data=data.frame(x=x,y=y))
}
set.seed(123)
x <- runif(50,1,10)
y <- 1/(1+16 + 36*exp(x)) + rnorm(50,0,0.1)
hhh(y,x)

which results in an error

	Error in get(x, envir, mode, inherits) : variable "g" was not found

So can one assign the function ``g'' somewhere where it **can**
be found?  I.e. use something like

	assign("g",g,envir=??????)

Or is there some other magic incantation that can be used here
to get nls to deal with a ``g'' defined inside the function
which call nsl()?

In the real problem the function g is a complicated gadget, taking
different forms in different parts of its domain, so it is
inconvenient-to-impossible to specify it explicitly in the formula in
the call to nls().

Thanks for any help you can give.

				cheers,

					Rolf Turner
					rolf at math.unb.ca




More information about the R-help mailing list