在R中的lm函数中动态生成因子名称
我这里有个问题 我们经常使用“正常”的在R中的lm函数中动态生成因子名称,r,lm,R,Lm,我这里有个问题 我们经常使用“正常”的lmfit: model <- lm(y~0+x1+x2+x3, data=d) 请注意,y2,y3。。。从列表中按顺序选择。实际上有一个函数 factorOfInterest <-getFactors(y) factorOfInterest说您的数据如下所示: set.seed(1) df1 <- data.frame(x1=rnorm(5), x2=rnorm(5),
lm
fit:
model <- lm(y~0+x1+x2+x3, data=d)
请注意,y2
,y3
。。。从列表中按顺序选择。实际上有一个函数
factorOfInterest <-getFactors(y)
factorOfInterest说您的数据如下所示:
set.seed(1)
df1 <- data.frame(x1=rnorm(5),
x2=rnorm(5),
x3=rnorm(5),
y1=rnorm(5),
y2=rnorm(5)
)
(我确信更大的集合可以使用更快的方法)…使用粘贴和as.formula
创建公式。请注意,如果RHS相等,则可以通过将模型作为矩阵传递给lm
,一次为多个yi
拟合模型。
set.seed(1)
df1 <- data.frame(x1=rnorm(5),
x2=rnorm(5),
x3=rnorm(5),
y1=rnorm(5),
y2=rnorm(5)
)
### get columns named x
c1 <- colnames(df1)[grepl("x",colnames(df1))]
### make matrix of all combinations
library(combinat)
c2 <- combinat::hcube(rep(2, length(c1)))-1
### remove top row (represents intercept-only model)
c2 <- c2[-1, ]
### list to store results
l1 <- as.list(vector(length=nrow(c2)))
### use matrix for y values when fitting models
lhs1 <- cbind(df1$y1, df1$y2)
for (i in 1:nrow(c2)){
### subset of x variables
rhs1 <- c1[as.logical(c2[i, ])]
rhs1 <- paste0(rhs1, collapse="+")
f1 <- paste("lhs1", rhs1, sep="~")
f1 <- as.formula(f1)
l1[[i]] <- lm(f1)
}