> On 11 Mar 2016, at 08:25 , David Winsemius <dwinsem...@comcast.net> wrote:
>> 
...
>>> dfrm <- data.frame(y=rnorm(10), x1=rnorm(10) ,x2=as.factor(TRUE), 
>>> x3=rnorm(10))
>>> lm(y~x1+x2+x3, dfrm, na.action=na.exclude)
>> Error in `contrasts<-`(`*tmp*`, value = contr.funs[1 + isOF[nn]]) : 
>> contrasts can be applied
> 
> Yes, and the error appears to come from `model.matrix`:
> 
>> model.matrix(y~x1+factor(x2)+x3, dfrm)
> Error in `contrasts<-`(`*tmp*`, value = contr.funs[1 + isOF[nn]]) : 
>  contrasts can be applied only to factors with 2 or more levels
> 

Actually not. The above is because you use an explicit factor(x2). The actual 
smoking gun is this line in lm()

mf$drop.unused.levels <- TRUE

which someone must have thought was a good idea at some point....

model.matrix itself is quite happy to leave factors alone and let subsequent 
code sort out any singularities, e.g.

> model.matrix(y~x1+x2, data=df[1:2,])
  (Intercept) x1 x2B
1           1  1   0
2           1  1   0
attr(,"assign")
[1] 0 1 2
attr(,"contrasts")
attr(,"contrasts")$x2
[1] "contr.treatment"



>> model.matrix(y~x1+x2+x3, dfrm)
>   (Intercept)          x1 x2TRUE         x3
> 1            1  0.04887847      1 -0.4199628
> 2            1 -1.04786688      1  1.3947923
> 3            1 -0.34896007      1 -2.1873666
> 4            1 -0.08866061      1  0.1204129
> 5            1 -0.41111366      1 -1.6631057
> 6            1 -0.83449110      1  1.1631801
> 7            1 -0.67887823      1  0.3207544
> 8            1 -1.12206068      1  0.6012040
> 9            1  0.05116683      1  0.3598696
> 10           1  1.74413583      1  0.3608478
> attr(,"assign")
> [1] 0 1 2 3
> attr(,"contrasts")
> attr(,"contrasts")$x2
> [1] "contr.treatment"
> 
> -- 
> 
> David Winsemius
> Alameda, CA, USA
> 
> ______________________________________________
> R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
> 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.

-- 
Peter Dalgaard, Professor,
Center for Statistics, Copenhagen Business School
Solbjerg Plads 3, 2000 Frederiksberg, Denmark
Phone: (+45)38153501
Office: A 4.23
Email: pd....@cbs.dk  Priv: pda...@gmail.com

______________________________________________
R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
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.

Reply via email to