我可以使用 mapply 拟合不同的回归模型吗?
Can I fit different regression models using mapply?
我正在尝试查看是否可以在 iris 数据集上使用 mapply 函数来拟合多个回归模型。
我首先定义我的回归模型:
reg<-function(dependent,independent){lm(eval(paste0(dependent,"~",independent,",data=iris")))}
然后我定义因变量和自变量的向量:
dependent<-c("Sepal.Length","Sepal.Width")
independent<-c("Sepal.Width","Sepal.Length")
最后我尝试应用 mapply 函数:
models_reg<-mapply(reg,dependent,independent)
但是,我收到一条错误消息,声称:
Error in parse(text = x, keep.source = FALSE) :
<text>:1:25: unexpected ','
1: Sepal.Length~Sepal.Width,
是否有可能实现我的 objective(使用 mapply 拟合不同的回归模型),在那种情况下,我做错了什么?
您不需要在此处评估字符串。您可以在 lm
中将公式作为字符串传递:
reg<- function(dependent,independent) {
lm(paste0(dependent,"~",independent),data=iris)
}
构造公式的另一种方法是使用 reformulate
:
reg<-function(dependent,independent) {
lm(reformulate(independent, dependent),data=iris)
}
现在您可以使用 Map
调用:
Map(reg, dependent, independent)
#$Sepal.Length
#Call:
#lm(formula = reformulate(independent, dependent), data = iris)
#Coefficients:
#(Intercept) Sepal.Width
# 6.5262 -0.2234
#$Sepal.Width
#Call:
#lm(formula = reformulate(independent, dependent), data = iris)
#Coefficients:
# (Intercept) Sepal.Length
# 3.41895 -0.06188
我正在尝试查看是否可以在 iris 数据集上使用 mapply 函数来拟合多个回归模型。
我首先定义我的回归模型:
reg<-function(dependent,independent){lm(eval(paste0(dependent,"~",independent,",data=iris")))}
然后我定义因变量和自变量的向量:
dependent<-c("Sepal.Length","Sepal.Width")
independent<-c("Sepal.Width","Sepal.Length")
最后我尝试应用 mapply 函数:
models_reg<-mapply(reg,dependent,independent)
但是,我收到一条错误消息,声称:
Error in parse(text = x, keep.source = FALSE) :
<text>:1:25: unexpected ','
1: Sepal.Length~Sepal.Width,
是否有可能实现我的 objective(使用 mapply 拟合不同的回归模型),在那种情况下,我做错了什么?
您不需要在此处评估字符串。您可以在 lm
中将公式作为字符串传递:
reg<- function(dependent,independent) {
lm(paste0(dependent,"~",independent),data=iris)
}
构造公式的另一种方法是使用 reformulate
:
reg<-function(dependent,independent) {
lm(reformulate(independent, dependent),data=iris)
}
现在您可以使用 Map
调用:
Map(reg, dependent, independent)
#$Sepal.Length
#Call:
#lm(formula = reformulate(independent, dependent), data = iris)
#Coefficients:
#(Intercept) Sepal.Width
# 6.5262 -0.2234
#$Sepal.Width
#Call:
#lm(formula = reformulate(independent, dependent), data = iris)
#Coefficients:
# (Intercept) Sepal.Length
# 3.41895 -0.06188