R:循环过滤
R: filtering in loop
我要通过循环在不同的数据集上执行 lm() ,这应该首先使用 filter() 制作数据集,然后在过滤后的数据集上执行 lm() 并保存结果。
但是,我总是遇到这个错误,我不知道自己做错了什么。
"Error in contrasts<-
(*tmp*
, value = contr.funs[1 + isOF[nn]]) :
contrasts can be applied only to factors with 2 or more levels"
我的代码:
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,"'")**)
但总是出现同样的错误...谢谢!
使用行的子集更新全局环境中的原始对象将为后续迭代抛出错误,因为 ==
returns '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' 向量(假设 'variable_name' 中有更多 unique
值并且只需要基于 'a' 向量的模型)
model_lst <- lapply(a, function(b) {
lm(y ~ x1 + x2, data = subset(dataset, variable_name == b)
})
我要通过循环在不同的数据集上执行 lm() ,这应该首先使用 filter() 制作数据集,然后在过滤后的数据集上执行 lm() 并保存结果。 但是,我总是遇到这个错误,我不知道自己做错了什么。
"Error in
contrasts<-
(*tmp*
, value = contr.funs[1 + isOF[nn]]) :
contrasts can be applied only to factors with 2 or more levels"
我的代码:
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,"'")**)
但总是出现同样的错误...谢谢!
使用行的子集更新全局环境中的原始对象将为后续迭代抛出错误,因为 ==
returns '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' 向量(假设 'variable_name' 中有更多 unique
值并且只需要基于 'a' 向量的模型)
model_lst <- lapply(a, function(b) {
lm(y ~ x1 + x2, data = subset(dataset, variable_name == b)
})