我正在尝试使用lapply
运行几个回归。我想使用ifelse
条件来区分要运行的回归。但是,当我使用ifelse
时,输出不是lm
对象。我附上了重现我的问题的代码。请帮忙。
attach(iris)
names.list = c('a','b','c')
models.work = lapply(names.list,
function(f)
{
lm(Sepal.Length~Sepal.Width,data=iris)
})
models.not.work = lapply(names.list,
function(f)
{
ifelse(1==1,
lm(Sepal.Length~Sepal.Width,data=iris),
lm(Sepal.Length~Sepal.Width,data=iris)
)
})
答案 0 :(得分:2)
ifelse
表示会返回:
具有相同长度和属性的矢量(包括尺寸和尺寸) “阶级”)作为考试
其中test
是输入。您的输入为1==1
(顺便提一下,您可以使用TRUE
),输入长度为1.因此ifelse将返回长度为1的内容。lm
返回一个列表,以便它只返回该列表中的第一个元素。这恰好是系数。
ifelse
不是您想要在这里使用的。目前还不清楚你真正想要做什么,但最有可能找到实现目标的更好方法。
如果你手动循环遍历这些元素,你可能只想使用普通的if
语句。如果你解释一下你实际上想做什么,可能有更好的方法。
答案 1 :(得分:0)
ifelse
无法返回模型对象。使用正常的if
- else
子句,应该这样做。
attach(iris)
names.list = c('a','b','c')
models.not.work = lapply(names.list,
function(f)
{
if(1==1){
lm(Sepal.Length~Sepal.Width,data=iris)}else{
lm(Sepal.Length~Sepal.Width,data=iris)
}
})
#output
> models.not.work[[1]]
Call:
lm(formula = Sepal.Length ~ Sepal.Width, data = iris)
Coefficients:
(Intercept) Sepal.Width
6.5262 -0.2234