Siew Leng TENG
2003-Aug-04 06:00 UTC
[R] Error in calling stepAIC() from within a function
Hi, I am experiencing a baffling behaviour of stepAIC(), and I hope to get any advice/help on what went wrong or I'd missed. I greatly appreciate any advice given. I am using stepAIC() to, say, select a model via stepwise selection method. R Version : 1.7.1 Windows ME Many thanks and best regards, Siew-Leng ***Issue : When stepAIC() is placed within a function, it seems that stepAIC() cannot detect the data matrix, and the program is halted as a result. However, when the same codes are copied, paste and run in R workspace, stepAIC can execute and R is able to produce the desired output. ***Actions taken : I had tried to look into and manipulate environments and formals(f), but with not much luck. ***Code snippets (an example): library(MASS) library(nls) Data<-data.frame(matrix(rnorm(120),ncol=6)) colnames(Data)<-c("Y",paste("X",1:5,sep="")) f<-function(A) { a <-glm(Y~X1+X2+X3, data=A) b <-stepAIC(a,scope=list(upper=~X1+X2+X3+X4+X5,lower=~1),direction="both",trace=FALSE) b } f(Data) R gives the following error : > f(Data) Error in model.frame.default(formula = Y ~ X1 + X3, data = A, drop.unused.levels = TRUE) : Object "A" not found However, when the same codes are copied, paste and run in the workspace, stepAIC() can run, and R is able to produce the desired output : A <- Data a <-glm(Y~X1+X2+X3, data=A) b <-stepAIC(a,scope=list(upper=~X1+X2+X3+X4+X5,lower=~1),direction="both",trace=FALSE) b> b> Call: glm(formula = Y ~ X4, data = A) > > Coefficients: > (Intercept) X4 > 0.1942 -0.3314 > > Degrees of Freedom: 19 Total (i.e. Null); 18 > Residual > Null Deviance: 20.51 > Residual Deviance: 17.95 AIC: 60.6 > >__________________________________ Yahoo! SiteBuilder - Free, easy-to-use web site design software
Prof Brian Ripley
2003-Aug-04 08:03 UTC
[R] Error in calling stepAIC() from within a function
Your example works for me in R-devel, and in R 1.7.1 using step() rather than stepAIC(). On Sun, 3 Aug 2003, Siew Leng TENG wrote:> Hi, > > I am experiencing a baffling behaviour of stepAIC(), > and I hope to get any advice/help on what went wrong > or I'd missed. I greatly appreciate any advice given. > > I am using stepAIC() to, say, select a model via > stepwise selection method. > > R Version : 1.7.1 > Windows ME > > Many thanks and best regards, > Siew-Leng > > > ***Issue : > > When stepAIC() is placed within a function, it seems > that stepAIC() cannot detect the data matrix, and > the > program is halted as a result. However, when the > same > codes are copied, paste and run in R workspace, > stepAIC can execute and R is able to produce the > desired output. > > ***Actions taken : > I had tried to look into and manipulate environments > and formals(f), but with not much luck. > > > ***Code snippets (an example): > > library(MASS) > library(nls) > > Data<-data.frame(matrix(rnorm(120),ncol=6)) > colnames(Data)<-c("Y",paste("X",1:5,sep="")) > > f<-function(A) > { > a <-glm(Y~X1+X2+X3, data=A) > b > > <-stepAIC(a,scope=list(upper=~X1+X2+X3+X4+X5,lower=~1),direction="both",trace=FALSE) > b > } > > > f(Data) > > > R gives the following error : > > > f(Data) > Error in model.frame.default(formula = Y ~ X1 + X3, > data = A, drop.unused.levels = TRUE) : > Object "A" not found > > > However, when the same codes are copied, paste and > run > in the workspace, stepAIC() can run, and R is able > to > produce the desired output : > > A <- Data > a <-glm(Y~X1+X2+X3, data=A) > b > > <-stepAIC(a,scope=list(upper=~X1+X2+X3+X4+X5,lower=~1),direction="both",trace=FALSE) > b > > > b > > > Call: glm(formula = Y ~ X4, data = A) > > > > Coefficients: > > (Intercept) X4 > > 0.1942 -0.3314 > > > > Degrees of Freedom: 19 Total (i.e. Null); 18 > > Residual > > Null Deviance: 20.51 > > Residual Deviance: 17.95 AIC: 60.6 > > > > > > __________________________________ > > Yahoo! SiteBuilder - Free, easy-to-use web site design software > > ______________________________________________ > R-help at stat.math.ethz.ch mailing list > https://www.stat.math.ethz.ch/mailman/listinfo/r-help >-- Brian D. Ripley, ripley at stats.ox.ac.uk Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/ University of Oxford, Tel: +44 1865 272861 (self) 1 South Parks Road, +44 1865 272866 (PA) Oxford OX1 3TG, UK Fax: +44 1865 272595