将 lm 应用于多个数据集
applying lm to multiple datasets
下面是 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.. 等等)。每个中的第一个 column/variable 将是响应,其余的将是自变量。
此代码有效但不适用于我的实际数据集。由于我的数据集具有变量的实际名称,因此我使用变量的位置代替如下:
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')
models <- lapply(dsets,
function(data){
lm(reformulate(termlabels=".", response=names(data)[1]), data)
})
reformulate
允许您从 character
个字符串构造公式。
下面是 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.. 等等)。每个中的第一个 column/variable 将是响应,其余的将是自变量。
此代码有效但不适用于我的实际数据集。由于我的数据集具有变量的实际名称,因此我使用变量的位置代替如下:
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')
models <- lapply(dsets,
function(data){
lm(reformulate(termlabels=".", response=names(data)[1]), data)
})
reformulate
允许您从 character
个字符串构造公式。