以下是代码:
data_complete<-read.delim("D:/Work/output_java_head.txt") #complete data set #working
modelfn<-function(data_complete){
model<-lm(mctr~price+age_group+gender+brand+product_typeid+google_product_category,data=data_complete)
data_complete$predicted<-predict(model,data_complete)
return(data_complete$predicted)
sink()
write.csv("D:/Work/output",i,".csv")
rm(model)
gc(TRUE)
} #working
然后使用此命令:
by(data_complete,data_complete$google_product_category,modelfn)
我收到了这个错误:
contrasts<-
中的错误(*tmp*
,值= contr.funs [1 + isOF [nn]]): 对比只能适用于具有2级或更多级别的因素
请注意data_complete$google_product_category
共有117个关卡,data_complete
共有22个关卡。
我也用于测试:
by(data_complete,data_complete$google_product_category,summary)
它给了我正确的答案。
所以我猜我创建的函数modelfn
存在一些问题。
答案 0 :(得分:3)
我不确定你在写评论时是否相信我,但这是一个非常直接的错误,与你的一个变量只有一个观察到的水平有关。这是一个演示它的简单示例:
> x <- factor(rep(1,100), levels=1:20)
> y <- rnorm(100)
> lm(y~x)
Error in `contrasts<-`(`*tmp*`, value = contr.funs[1 + isOF[nn]]) :
contrasts can be applied only to factors with 2 or more levels
确保您的数据实际上看起来像您认为的那样。即使变量附加了多个因子级别,变量也可能缺少多个级别的实际观察值。同样,如果您无法共享数据,我们无法真正帮助您,因此您必须自己查找发生这种情况的位置。