r - R:循环过滤
问题描述
我要通过循环对不同的数据集执行 lm(),首先应该使用 filter() 制作数据集,然后对过滤后的数据集执行 lm() 并保存结果。但是,我总是收到这个错误,我不知道我做错了什么。
“
contrasts<-
(*tmp*
, value = contr.funs[1 + isOF[nn]]) 中的错误:
对比只能应用于具有 2 个或更多级别的因子”
我的代码:
a<-c("var1", "var2", "var3") #character vector
for (b in a){
dataset <- dataset%>%filter(variable_name == b)
lm<- lm(y ~ x1 + x2, data=dataset)
assign(paste(b, "lm", sep='_'), lm)
}
任何人都可以帮助我吗?我知道这真的很初级。根据搜索结果,我也尝试过
dataset <- dataset%>%filter(variable_name == **paste0("'",b,"'")**)
但总是得到同样的错误......谢谢!
解决方案
使用行子集更新全局环境中的原始对象将引发后续迭代错误,==
因为“var2”和“var3”返回 0 行(当dataset
“variable_name”中只有“var1”值时)。相反,在循环中创建一个临时对象(也可以删除)
for (b in a){
tmp <- subset(dataset, variable_name == b)
model <- lm(y ~ x1 + x2, data = tmp)
assign(paste(b, "lm", sep='_'), model)
rm(tmp)
}
list
在全局环境中 创建单个对象而不是多个对象也可能更好。split
将比基于“variable_name”中的值==
将数据拆分为数据子集更快list
model_lst <- lapply(split(dataset, dataset$variable_name), function(tmp)
lm(y ~ x1 + x2, data = tmp))
或者,如果我们更喜欢使用“a”向量(假设unique
“variable_name”中有更多值并且只想要基于“a”向量的模型)
model_lst <- lapply(a, function(b) {
lm(y ~ x1 + x2, data = subset(dataset, variable_name == b)
})
推荐阅读
- python - 检查字典中的任何键是否匹配任何值
- android - 应用期间的Android通知在后台,意图数据为空
- computer-vision - “要解压的值太多(预期为 2)”我在进行实时对象识别时遇到了这个错误。如何解决这个问题?
- amazon-web-services - 使用带有自签名证书的 HTTPS 到后端服务器的 ELB
- python - 如何从 Python 中的字符串列表制作旭日形图?
- javascript - 如何在计费系统的数据库中添加项目
- azure - 负载均衡器未在 Azure AKS 引擎上获取公共 IP
- python - SyntaxError:文件中的非 ASCII 字符“\xc2”,但在 Python 2.7 中未声明编码
- php - 在页面模板中不显示自定义 Wordpress 循环
- javascript - 更新 react 和 react-dom 后的打字稿错误