Skip to content

R-alpha: two-sided to one-sided formula

3 messages · Peter Dalgaard, Douglas Bates

#
At times we want to convert a two-sided formula to a one-sided
formula.  In S we can do this by dropping the second entry in the
formula.  In R that object no longer has a formula class.
 R> ttt <- score ~ age | Infant
 R> class(ttt)
 [1] "formula"
 R> length(ttt)
 [1] 3
 R> ttt[-2]
 [[1]]
 ~

 [[2]]
 age | Infant

 R> class(ttt[-2])
 NULL
 R> do.call("~", ttt[-(1:2)])
 ~age | Infant

In general it would not be a good idea to propagate the formula class
to subsets but it does make sense in this case.  We can get around it
by replacing ttt[-2] by do.call("~", ttt[-(1:2)]) I suppose.  Any
opinions on whether ttt[-2] should still be a formula?
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-devel mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-devel-request@stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._
#
Douglas Bates <bates@stat.wisc.edu> writes:
Hum. tt[-i] is a well-defined formula iff (i != 1). Somehow, I dislike
the idea of properties depending on the value of a parameter, so I'm
inclined to say no. BTW,

eval(as.call(ttt[-2]))

also works. And one would *think* that formula(as.call(ttt[-2])) did
too, but typeof(as.call(...))==language and !=call (is this weird or
not?), so formula.default protests.
#
Peter Dalgaard BSA <p.dalgaard@biostat.ku.dk> writes:
I agree with Peter.  We will change our code.
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-devel mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-devel-request@stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._