Não sei se entendi direito, mas fiz uma tentativa. Se a ideia servir dá pra colocar na forma de uma função.
### <code r>
treat <- gl(4, 15, labels = paste("t", 1:4, sep="")); treat # Fatores
# Variables
set.sed(124)
sp <- cbind(c(rnorm(10, 5, 0.25), rnorm(50, 2.5, 0.25)), rnorm(60, 2.5, 0.25),
c(rnorm(10, 12, 0.25), rnorm(50, 2.5, 0.25)), rnorm(60, 2.5, 0.25))
colnames(sp) <- c("sp1", "sp2", "sp3", "sp4")
head(sp)
#Criação da matriz de contrastes
TI <- model.matrix(~ treat-1)
head(TI)
f <- length(levels(treat))
comb <- t(combn(1:f, 2))
n <- nrow(comb)
contr2 <- NULL
for (x in 1:n) {
i <- comb[x, 1]
j <- comb[x, 2]
tmp <- list(TI[,i] - TI[,j]); names(tmp) <- paste0("TI",i, "_", j)
contr2 <- c(contr2, tmp)
}
contr2
head(do.call(cbind, contr2))
# TI1_2 TI1_3 TI1_4 TI2_3 TI2_4 TI3_4
# 1 1 1 1 0 0 0
# 2 1 1 1 0 0 0
# 3 1 1 1 0 0 0
# 4 1 1 1 0 0 0
# 5 1 1 1 0 0 0
# 6 1 1 1 0 0 0
### </code>