Depending on what your ultimate goal is, you could use something like
want <- model.matrix( ~ (a + b + c + d)^2 , data=your_data)
This will create a matrix with the appropriate main effects and first
order interactions. If you just want to run a simple regression, you
could do it directly
lm(y ~ (a + b + c + d)^2 , data=your_data)
but the formula (a + b + c + d)^2 isn't accepted by all packages that do
some form of regression.
Hope this is helpful,
Dan
On 3/23/2025 10:47 AM, Stephen Bond via R-help wrote:
I am sending to this forum as stackoverflow has devolved into sth
pretty bad.
Below code shows how to get what I want in a clumsy way.
cols <- letters[1:4]
a1 <- outer(cols,cols,paste0)
b1 <- a1[!lower.tri(a1)]
X <- matrix(rnorm(80),ncol=4)
colnames(X) <- cols
X <- as.data.frame(X)
XX <- matrix(0,nrow=nrow(X),ncol=length(b1))
colnames(XX) <- b1
for (k in 1:length(b1)){
XX[,k] <- X[,substr(b1[k],1,1)]*X[,substr(b1[k],2,2)]
}
Is there a way to get that using a formula or some neat trick? The
above will not work for factors, so I will need to create the factor
crossings using formula a*b*c and then cross with the numerics, which
is even more clumsy.
Thanks everybody
______________________________________________
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 https://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.
--
Daniel Nordlund
Port Townsend, WA
(425) 273-5256
______________________________________________
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 https://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.