(Trying to redeem myself…) In response to Jared’s comment on @Fabians answer about automating it, note that all you need to supply is a named list of contrast matrices. contrasts()
takes a vector/factor and produces the contrasts matrix from it. For this then we can use lapply()
to run contrasts()
on each factor in our data set, e.g. for the testFrame
example provided:
> lapply(testFrame[,4:5], contrasts, contrasts = FALSE)
$Fourth
Alice Bob Charlie David
Alice 1 0 0 0
Bob 0 1 0 0
Charlie 0 0 1 0
David 0 0 0 1
$Fifth
Edward Frank Georgia Hank Isaac
Edward 1 0 0 0 0
Frank 0 1 0 0 0
Georgia 0 0 1 0 0
Hank 0 0 0 1 0
Isaac 0 0 0 0 1
Which slots nicely into @fabians answer:
model.matrix(~ ., data=testFrame,
contrasts.arg = lapply(testFrame[,4:5], contrasts, contrasts=FALSE))