下面是4个数据集(我刚刚为了提供可重现的代码而随机创建它们)。我创建了这些列表,因此我可以立即将“lm”应用于这些多个数据集:
H<-data.frame(replicate(10,sample(0:20,10,rep=TRUE)))
C<-data.frame(replicate(5,sample(0:100,10,rep=FALSE)))
R<-data.frame(replicate(7,sample(0:30,10,rep=TRUE)))
E<-data.frame(replicate(4,sample(0:40,10,rep=FALSE)))
dsets<-list(H,C,R,E)
models<-lapply(dsets,function(x)lm(X1~.,data=x))
lapply(models,summary)
每个数据集中的变量都不同(计数和名称。但是,如果运行代码,它们都将是x1,x2 ......等等)。每个中的第一列/变量将是响应,其余的将是自变量。
此代码有效,但不适用于我的实际数据集。由于我的数据集具有变量的实际名称,因此我使用变量的位置,如下所示:
dsets<-list(H,C,R,E)
models<lapply(dsets,function(x)lm(x[,1]~.,data=x))
lapply(models,summary)
使用上述内容,结果搞砸了。它还包括响应变量作为自变量。
有人可以帮忙吗?
编辑:我意识到x [,1]正在调用整个列,而不是列名
models<lapply(dsets,function(x)lm(colnames(x)[1]~.,data=x))
lapply(models,summary)
但这也不起作用。我收到以下错误
Error in model.frame.default(formula = colnames(H[1]) ~ ., data = H, drop.unused.levels = TRUE) :
variable lengths differ (found for 'Var1')
答案 0 :(得分:1)
models <- lapply(dsets,
function(data){
lm(reformulate(termlabels=".", response=names(data)[1]), data)
})
reformulate
允许您从character
字符串构建公式。