Multiple left hand side variables in a formula
On Fri, 1 Mar 2013, Frank Harrell wrote:
Thank you Bill. A temporary re-arrangement of the formula will allow me to do the usual subset= na.action= processing afterwards. Nice idea. I don't need the dot notation very often for this application.
That's what the "Formula" package provides. It allows for multiple parts
and multiple responses on both side of the ~. Internally, the formula is
decomposed and separate terms are produced. And using an auxiliary formula
it is assured that a single model frame (with unified NA processing). And
all of this is hidden from the user by providing methods that are as
standard as possible, see:
vignette("Formula", package = "Formula")
hth,
Z
Frank William Dunlap wrote
I don't know how much of the information that model.frame supplies you
need,
but you could make a data.frame containing all the variables on both sides
of them
formula by changing lhs~rhs into ~lhs+rsh before calling model.frame.
E.g.,
f <- function (formula) {
if (length(formula) == 3) { # has left hand side
envir <- environment(formula)
formula <- formula(call("~", call("+", formula[[2]],
formula[[3]])))
environment(formula) <- envir
}
formula
}
This doesn't quite take care of the wild-card dot in the formula: straight
variables are omitted from dot's expansion but functions of variables are
not:
colnames(model.frame(f(log(mpg)+hp ~ .), data=mtcars))
[1] "log(mpg)" "hp" "mpg" "cyl" [5] "disp" "drat" "wt" "qsec" [9] "vs" "am" "gear" "carb" Bill Dunlap Spotfire, TIBCO Software wdunlap tibco.com
-----Original Message----- From:
r-help-bounces@
[mailto:
r-help-bounces@
] On Behalf
Of Frank Harrell Sent: Friday, March 01, 2013 4:17 PM To:
r-help@
Subject: [R] Multiple left hand side variables in a formula The lattice package uses special logic to allow for multiple left-hand-side variables in a formula, e.g. y1 + y2 ~ x. Is there an elegant way to do this outside of lattice? I'm trying to implement a data summarization function that logically takes multiple dependent variables. The usual invocation of model.frame( ) causes R to try to do arithmetic addition to create a single dependent variable. Thanks Frank ----- Frank Harrell Department of Biostatistics, Vanderbilt University -- View this message in context: http://r.789695.n4.nabble.com/Multiple-left-hand-side- variables-in-a-formula-tp4660060.html Sent from the R help mailing list archive at Nabble.com.
______________________________________________
R-help@
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.
______________________________________________
R-help@
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.
----- Frank Harrell Department of Biostatistics, Vanderbilt University -- View this message in context: http://r.789695.n4.nabble.com/Multiple-left-hand-side-variables-in-a-formula-tp4660060p4660065.html Sent from the R help mailing list archive at Nabble.com.
______________________________________________ R-help at 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.