以下是代码:
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*,value = contr.funs[1 + isOFnn]):对比只适用于2级或2级以上的因素
请注意,data_complete$google_product_category中有117个级别,data_complete中总共有22个列。
此外,我还用于测试:
by(data_complete,data_complete$google_product_category,summary)它给了我正确的答案。
因此,我想在我创建的函数modelfn中存在一些问题。
发布于 2014-04-15 10:03:57
我不确定你在写我的评论时是否相信我,但这是一个非常直接的错误,因为你的一个变量只有一个观察到的水平。下面是一个简单的示例来演示它:
> 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确保你的数据看起来像你认为的那样。即使一个变量有多个因素级别,该变量很可能在多个级别上缺乏实际的观测值。同样,如果您不能共享数据,我们将无法真正帮助您,因此您必须自己寻找发生这种情况的地方。
https://stackoverflow.com/questions/23077125
复制相似问题