Ben’s answer works, but do.call
provides the more general solution he wished for.
getm <- function(xs) {
f <- as.formula(paste("y ~", paste(xs, collapse="+")))
do.call("lme", args = list(f, random=~1|id, data=d, method="ML"))
}
It works because (by default) the arguments in args =
are evaluated before being passed to lme.