有没有办法在 R 中执行以下操作?我的意思是仅使用 R 原生的功能。
假设我有一个数据框 df,有 8 列:x1 到 x8。 我想将 x1 上的 x8 回归到 x7。
我们将变量 (x1, x2, x3) 表示为 P。 变量 (x4, x5, x6) 可以是 Q。
鉴于这些定义,有没有办法让我更简洁地执行如下所示的操作?
model = lm(x8 ~ (x1 + x2 + x3) * (x4 + x5 + x6) + x7, data=df)
就目前情况而言,我只是用paste()将东西拼凑在一起,然后将其放入as.formula()中。
model = lm(as.formula(paste(stmt, sep="")), data=df)
还要考虑这不是为了特定的分析。如果有一种简单的方法可以做到这一点,那就太好了。如果没有,我就像现在一样使用管道胶带。
将
reformulate
与 outer
一起使用。
P <- c("x1", "x2", "x3")
Q <- c("x4", "x5", "x6")
other <- "x7"
response <- "y"
fo <- reformulate( c(P, Q, other, outer(P, Q, paste, sep = ":")), response)
fo
## y ~ x1 + x2 + x3 + x4 + x5 + x6 + x7 + x1:x4 + x2:x4 + x3:x4 +
## x1:x5 + x2:x5 + x3:x5 + x1:x6 + x2:x6 + x3:x6
lm(fo, data)