Sorry, I'm stuck. :) I am writing a function, which would fit either one linear model or another one, depending on its argument model.type. And I don't want to use several if's, because R allows doing it with much more beauty. That is I am looking for prettier alternative to the following AB2C<-function(a,b,model.type="S") { # or HK, and return NULL if this argument has any other value [ do some stuff] if(model.type=="S") model<-lm( [s.model formula] ) else if (model.type == "HK") model<-lm([hk.model formula]) else model<-NULL return(model) } I was looking at "switch", but didn't come to solution. Sorry <:) -- View this message in context: http://www.nabble.com/Please%2C-remind-a-function-name-tf3797444.html#a10741597 Sent from the R help mailing list archive at Nabble.com.
You could use the class dispatching mechanism: mymodel <- function(a, b, method = "S") { .Class <- method NextMethod("mymodel") } mymodel.S <- function(a, b, method = "S") cat("S:", a, b, method, "\n") mymodel.HK <- function(a, b, method = "S") cat("HK:", a, b, method, "\n") mymodel(1:3, 1:4) mymodel(1:3, 1:4, "S") mymodel(1:3, 1:4, "HK") On 5/22/07, Vladimir Eremeev <wl2776 at gmail.com> wrote:> > Sorry, I'm stuck. :) > > I am writing a function, which would fit either one linear model or another > one, depending on its argument model.type. > And I don't want to use several if's, because R allows doing it with much > more beauty. > > That is I am looking for prettier alternative to the following > > AB2C<-function(a,b,model.type="S") { # or HK, and return NULL if this > argument has any other value > [ do some stuff] > > if(model.type=="S") model<-lm( [s.model formula] ) > else if (model.type == "HK") model<-lm([hk.model formula]) > else model<-NULL > > return(model) > } > > I was looking at "switch", but didn't come to solution. Sorry <:) > > -- > View this message in context: http://www.nabble.com/Please%2C-remind-a-function-name-tf3797444.html#a10741597 > Sent from the R help mailing list archive at Nabble.com. > > ______________________________________________ > R-help at stat.math.ethz.ch 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. >
Vladimir Eremeev wrote:> Sorry, I'm stuck. :) > > I am writing a function, which would fit either one linear model or another > one, depending on its argument model.type. > And I don't want to use several if's, because R allows doing it with much > more beauty. > > That is I am looking for prettier alternative to the following > > AB2C<-function(a,b,model.type="S") { # or HK, and return NULL if this > argument has any other value > [ do some stuff] > > if(model.type=="S") model<-lm( [s.model formula] ) > else if (model.type == "HK") model<-lm([hk.model formula]) > else model<-NULL > > return(model) > } > > I was looking at "switch", but didn't come to solution. Sorry <:Er, what's wrong with model <- switch(model.type, S = lm( [s.model formula] ), HK = lm([hk.model formula] )) ?