[R] passing variable to formula environment

Eric Archer Eric.Archer at noaa.gov
Wed Aug 3 20:43:05 CEST 2005


List gurus,

I'm trying to code a Gompertz growth curve function as part of a larger 
project and have run across a problem due to my ignorance of 
environments. Some sample data and the function are as follows:

growth <- data.frame(age = c(1.92, 3, 5.83, 3.17, 15.5, 1.17, 5.58, 
13.33, 14.29, 5.83, 13.79, 6.33, 13.75, 16.83, 13, 11.67, 0.25, 1.73, 
9.46, 5.67), length = c(157, 165, 179, 171, 195, 135, 179, 193, 194, 
186, 196, 186, 210, 200, 189, 194, 106, 161, 188, 159))

# return gompertz fit
Gompertz <- function(data,Xintercept,Lzero,start) {
  gomp <- formula(length ~ Lzero * exp(k * (1 - exp(-g * (age - 
Xintercept)))))
  nls(formula=gomp,data=data,start=start)
}

When I run the function, I get the following error:

 > Gompertz(growth,0,87,list(k=0.5,g=0.5))
Error in eval(expr, envir, enclos) : Object "Lzero" not found

After reading through the help files on 'nls', 'formula', 'model.frame', 
and 'environment', I understand that the formula gets evaluated in the 
environment in which it is created, and in my case, "Lzero" is not 
defined in that environment, but I'm still shaky on the environment 
concept and can't figure out how to pass or include "Lzero" in the 
environment that nls is evaluating gomp and data in.

I have tried redefining "gomp" in the function as:

gomp <- as.formula("length ~ Lzero * exp(k * (1 - exp(-g * (age - 
Xintercept))))",environment()) 
# thinking that 'environment()' refers to environment of Gompertz 
function where Lzero exists

gomp <- as.formula("length ~ Lzero * exp(k * (1 - exp(-g * (age - 
Xintercept))))",environment(Gompertz))
# trying to explicitly force it

gomp <- as.formula("length ~ Lzero * exp(k * (1 - exp(-g * (age - 
Xintercept))))",new.env())
# my guess at what formula(x,...) does

...but I get the same error. Since I'm still trying to wrap my head 
around environments and evaluation in R, the solution to this will be 
very educational.  Thanks in advance.

Cheers,
e.

-- 

Eric Archer, Ph.D.
NOAA-SWFSC
8604 La Jolla Shores Dr.
La Jolla, CA 92037
858-546-7121,7003(FAX)
eric.archer at noaa.gov


"Lighthouses are more helpful than churches."
    - Benjamin Franklin

"Cogita tute" - Think for yourself




More information about the R-help mailing list