> Just so I can see if I understand ... that is because `as.name` will evaluate > `modelType` > whereas as.name("modelType") would look for the function `modelType` and not > find > such a name in the namespace?
Almost. as.name(modelType) will evaluate modelType so modelType could be a character string or a name. as.name itself does not do any lookups - that is eval's job. When eval() is given a name object it looks it up. > So modelType needs to be a language-object and `f` > needs to be called with: > > f(glm, ....) rather than f("glm", ...) If you use as.name(modelType) then you could call f("glm",...). f(glm, ...) does not pass a name into the function f, it passes in the object named "glm" (usually the function in package:stats by that name). as.name(glm) returns garbage. If you wanted to be able to call f(glm, predictors, response) you could just use call[[1]] <- modelType in f(). I didn't recommend that because then the call attributes of glm's output does not look nice. You can write code so that both f("glm",...) and f(glm,...) work but I usually prefer not to load up functions with so much heuristic argument processing (e.g., how should it deal with 'func<-"glm" ; f(func,...)' and the like). Bill Dunlap Spotfire, TIBCO Software wdunlap tibco.com > -----Original Message----- > From: David Winsemius [mailto:dwinsem...@comcast.net] > Sent: Thursday, December 19, 2013 11:31 AM > To: William Dunlap > Cc: Simon Kiss; r-help@r-project.org > Subject: Re: [R] Help using mapply to run multiple models > > > On Dec 19, 2013, at 11:10 AM, William Dunlap wrote: > > >>> call[[1]] <- quote(modelType) # ' > > > > makes call[[1]] the same as as.name("modelType"). You want > > as.name(modelType). > > Just so I can see if I understand ... that is because `as.name` will evaluate > `modelType` > whereas as.name("modelType") would look for the function `modelType` and not > find > such a name in the namespace? So modelType needs to be a language-object and > `f` > needs to be called with: > > f(glm, ....) rather than f("glm", ...) > > > > > > Bill Dunlap > > Spotfire, TIBCO Software > > wdunlap tibco.com > > > > > >> -----Original Message----- > >> From: Simon Kiss [mailto:sjk...@gmail.com] > >> Sent: Thursday, December 19, 2013 10:56 AM > >> To: William Dunlap > >> Cc: Dennis Murphy; r-help@r-project.org > >> Subject: Re: [R] Help using mapply to run multiple models > >> > >> Hello Bill, that is fantastic and it's quite a bit above what I could > >> write. Is there a way > to > >> make the model type an argument to the function so that you can specify > >> whether > one is > >> running glm, lm and such? > >> I tried to modify it by inserting an argument modelType below, but that > >> doesn't work. > >> Yours, simon Kiss > >>> f <- function (modelType, responseName, predictorNames, data, ..., envir = > >> parent.frame()) > >>> { > >>> call <- match.call() > >>> call$formula <- formula(envir = envir, paste(responseName, sep = " > >>> ~ ", > >>> paste0("`", predictorNames, "`", collapse = " + "))) > >>> call[[1]] <- quote(modelType) # ' > >>> call$responseName <- NULL # omit responseName= > >>> call$predictorNames <- NULL # omit 'predictorNames=' > >>> eval(call, envir = envir) > >>> } > >> On 2013-12-18, at 3:07 PM, William Dunlap <wdun...@tibco.com> wrote: > >> > >>> f <- function (responseName, predictorNames, data, ..., envir = > >>> parent.frame()) > >>> { > >>> call <- match.call() > >>> call$formula <- formula(envir = envir, paste(responseName, sep = " > >>> ~ ", > >>> paste0("`", predictorNames, "`", collapse = " + "))) > >>> call[[1]] <- quote(glm) # 'f' -> 'glm' > >>> call$responseName <- NULL # omit responseName= > >>> call$predictorNames <- NULL # omit 'predictorNames=' > >>> eval(call, envir = envir) > >>> } > >>> as in > >>> z <- lapply(list(c("hp","drat"), c("cyl"), c("am","gear")), > >>> FUN=function(preds)f("carb", > >> preds, data=mtcars, family=poisson)) > >>> lapply(z, summary) > >> > >> ********************************* > >> Simon J. Kiss, PhD > >> Assistant Professor, Wilfrid Laurier University > >> 73 George Street > >> Brantford, Ontario, Canada > >> N3T 2C9 > >> Cell: +1 905 746 7606 > >> > >> > > > > ______________________________________________ > > R-help@r-project.org 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. > > David Winsemius > Alameda, CA, USA ______________________________________________ R-help@r-project.org 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.