Megan Ferguson
2008-Feb-28 19:55 UTC
[R] use of step.gam (from package 'gam') and superassignment inside functions
Hello, I am using the function step.gam() from the 'gam' package (header info from library(help=gam) included below) and have come across some behavior that I cannot understand. In short, I have written a function that 1) creates a dataframe, 2) calls gam() to create a gam object, then 3) calls step.gam() to run stepwise selection on the output from gam(). When I do this, gam() can successfully build the model, but step.gam() is unable to see the dataframe that was created in my personal function and upon which my gam model was built. I've included stand-alone code below that will recreate the error. My code shows that this behavior doesn't occur with step(). If I use the superassignment operator "<<-" to define the dataframe "gam.jack" in the example below, I do not get an error. It seems like gam() finds gam.jack in the local environment of fxn, but step.gam() is looking only in the global environment for gam.jack. If anyone has further insight into what is going on here, I'd really appreciate it! ***Header info from library(help=gam)*** Information on package 'gam' Description: Package: gam Title: Generalized Additive Models Date: 2006-07-11 Version: 0.98 Author: Trevor Hastie Description: Functions for fitting and working with generalized additive models, as described in chapter 7 of "Statistical Models in S" (Chambers and Hastie (eds), 1991), and "Generalized Additive Models" (Hastie and Tibshirani, 1990). Maintainer: Trevor Hastie <hastie at stanford.edu> Depends: R (>= 2.0), stats, splines Suggests: akima License: GPL2.0 Packaged: Wed Dec 27 10:24:21 2006; hornik Built: R 2.6.0; i386-pc-mingw32; 2007-10-05 17:00:44; windows ***End of header for library gam*** ***Code that produces the error inserted below*** library(gam) rm(list = ls()) data(gam.data) fxn <- function() { gam.jack <- gam.data[sample(1:100, 50), ] print(summary(gam.jack)) gam.object <- gam(y~x+z, data=gam.jack) print(summary(gam.object)) step.object <- step.gam(gam.object, scope=list("x"=~1+x+s(x,4)+s(x,6)+s(x,12),"z"=~1+z+s(z,4))) } fxn() print(summary(gam.jack)) rm(list= ls()) data(swiss) fxn <- function() { swiss.jack <- swiss[sample(1:nrow(swiss), 20), ] lm1 <- lm(Fertility ~ ., data = swiss.jack) slm1 <- step(lm1) } fxn() ***End of code*** -- Megan C. Ferguson Southwest Fisheries Science Center 8604 La Jolla Shores Dr. La Jolla, CA 92037 (858)546-7118 W (858)546-7003 Fax Megan.Ferguson at noaa.gov