Thierry: I thought the post asked how to evaluate the arguments in the same way as the formula ... that is, without changing the paradigm (e.g. by requiring character arguments). So I think that Harold needs to explicitly specify in his code where to evaluate semMat, something like:
semMat <- eval(substitute(semMat), envir=dat, enclos=parent.frame() ) Cheers, Bert On Mon, Sep 9, 2013 at 7:18 AM, ONKELINX, Thierry <thierry.onkel...@inbo.be>wrote: > Dear Harold, > > An easy work-around would be to pass the names of the variables as a > character vector. > > fm <- lm.eiv(y ~ x1 + x2, dat, ind = c(2,3), semDep = 0, semMat = > c("sem1", "sem2")) > > And the change your lm.eiv.fit accordingly. > > Or you could have a look at the .() function of the plyr package. > > ddply(dat, c("sem1", "sem2"), some.function) > > is equivalent to > > ddply(dat, .(sem1, sem2), some.function) > > > Best regards, > > Thierry > ________________________________________ > Van: r-help-boun...@r-project.org [r-help-boun...@r-project.org] namens > Doran, Harold [hdo...@air.org] > Verzonden: maandag 9 september 2013 15:56 > Aan: r-help@r-project.org > Onderwerp: [R] S3 Methods for Linear Regression > > I have a function for fitting a type of linear regression and have written > methods for it as shown below. I exclude the main lm.eiv.fit function as it > is large and I don't think necessary for the reproducible example. But, I > can certainly provide if that would be needed. > > These methods allow for the normal formula interface with the function and > some of the other common methods (e.g., subset). One thing I cannot figure > out is how to allow the argument semMat in the function to recognize the > variable can also be in the dataframe "dat". > > When I call the function as follows everything is just fine. > > fm <- lm.eiv(y ~ x1 + x2, dat, ind = c(2,3), semDep = 0, semMat = > cbind(dat$sem1, dat$sem2)) > > However, if I were to use the following instead such that I do not specify > that both sem1 and sem2 are in the dataframe 'dat', > > fm <- lm.eiv(y ~ x1 + x2, dat, ind = c(2,3), semDep = 0, semMat = > cbind(sem1, sem2)) > Error in as.matrix(semMat) : > error in evaluating the argument 'x' in selecting a method for function > 'as.matrix': Error in cbind(sem1, sem2) : object 'sem1' not found > > How can I resolve this such that the argument semMat will also work with > variables in the dataframe 'dat' just as the variables in the formula > depend on dat? > > > lm.eiv <- function(...) UseMethod("lm.eiv") > > lm.eiv.default <- function(x, y, ind, semDep, semMat, ...){ > result <- lm.eiv.fit(x, y, ind, semDep, semMat, ...) > result$call <- match.call() > class(result) <- "eiv" > result > } > > lm.eiv.formula <- function(formula, data, na.action, subset, ind, semDep, > semMat, ...){ > mf <- match.call(expand.dots = FALSE) > m <- match(c("formula", "data", "na.action", "subset"), names(mf), 0L) > mf <- mf[c(1L, m)] > mf$drop.unused.levels <- TRUE > mf[[1L]] <- as.name("model.frame") > mf <- eval(mf, parent.frame()) > y <- model.response(mf) > mt <- attr(mf, "terms") > x <- model.matrix(mt, mf, contrasts) > result <- lm.eiv.default(x, y, ind, semDep, semMat, ...) > result$call <- match.call() > result$formula <- formula > result > } > > aa <- lm.eiv.formula(InstructScore_Spring ~ InstructScore_Fall, dat, ind = > 2, semDep = 0, semMat = dat$InstructScoreSE_Fall) > > [[alternative HTML version deleted]] > > ______________________________________________ > 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. > * * * * * * * * * * * * * D I S C L A I M E R * * * * * * * * * * * * * > Dit bericht en eventuele bijlagen geven enkel de visie van de schrijver > weer en binden het INBO onder geen enkel beding, zolang dit bericht niet > bevestigd is door een geldig ondertekend document. > The views expressed in this message and any annex are purely those of the > writer and may not be regarded as stating an official position of INBO, as > long as the message is not confirmed by a duly signed document. > > ______________________________________________ > 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. > -- Bert Gunter Genentech Nonclinical Biostatistics Internal Contact Info: Phone: 467-7374 Website: http://pharmadevelopment.roche.com/index/pdb/pdb-functional-groups/pdb-biostatistics/pdb-ncb-home.htm [[alternative HTML version deleted]] ______________________________________________ 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.