我尝试对不同的数据集运行方差分析,但不太知道该怎么做。我搜索了一下,发现这个很有用:https://stats.idre.ucla.edu/r/codefragments/looping_strings/ https://stats.idre.ucla.edu/r/codefragments/looping_strings/
hsb2 <- read.csv("https://stats.idre.ucla.edu/stat/data/hsb2.csv")
names(hsb2)
varlist <- names(hsb2)[8:11]
models <- lapply(varlist, function(x) {
lm(substitute(read ~ i, list(i = as.name(x))), data = hsb2)
})
我对上述代码的理解是,它创建了一个函数 lm() 并将其应用于 varlist 中的每个变量,并对每个变量进行线性回归。
所以我认为使用 aov 而不是 lm 对我有用,如下所示:
aov(substitute(read ~ i, list(i = as.name(x))), data = hsb2)
但是,我收到了这个错误:
Error in terms.default(formula, "Error", data = data) :
no terms component nor attribute
我不知道错误从何而来。请帮忙!
问题是substitute()
返回一个表达式,而不是一个公式。我认为@thelatemail 的建议
lm(as.formula(paste("read ~",x)), data = hsb2)
是一个很好的解决方法。或者,您可以评估表达式以获得公式
models <- lapply(varlist, function(x) {
aov(eval(substitute(read ~ i, list(i = as.name(x)))), data = hsb2)
})
我想这取决于您之后想要对模型列表做什么。正在做
models <- lapply(varlist, function(x) {
eval(bquote(aov(read ~ .(as.name(x)), data = hsb2)))
})
给了一个“清洁工”call
每个结果的属性。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)