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.