2016-09-14 22 views
0

我有一个动态字符串来创建一个model.matrix。字符串的值如下:Model.matrix对比度错误

total_matrix_str 
[1] "model.matrix(~ date + MDSE_ITEM_I + COLR_N + SLS_TYPE_GRP_C + dayofwk + 
MDSE_ITEM_REF_I + WK_END_D + GREG_D + SIZE_N + MDSE_STYL_N + COLR_FMLY_N + LATTD_I 
+ LNGTD_I + weekend + dsp + assort_size + colr_per + pctTillDate + weeknr + MEANTEMPM 
+ MEANVISM + MEANWINDSPDM + MAXHUMIDITY + MINHUMIDITY + MEANDEWPTM + MEANPRESSUREM 
+ FOG + RAIN + THUNDER ,data = total , 
contrasts.arg =list(MDSE_ITEM_I=contrasts(total$MDSE_ITEM_I,contrasts = F) , 
CO_LOC_I=contrasts(total$CO_LOC_I,contrasts = F) , 
COLR_N=contrasts(total$COLR_N,contrasts = F) , 
dayofwk=contrasts(total$dayofwk,contrasts = F) , 
SIZE_N=contrasts(total$SIZE_N,contrasts = F) , 
MDSE_STYL_N=contrasts(total$MDSE_STYL_N,contrasts = F) , 
COLR_FMLY_N=contrasts(total$COLR_FMLY_N,contrasts = F) , 
assort_size=contrasts(total$assort_size,contrasts = F) , 
weeknr=contrasts(total$weeknr,contrasts = F)))" 

下面是分类变量的不同值计数:

> length(unique(total$MDSE_ITEM_I)) 
[1] 30 
> length(unique(total$CO_LOC_I)) 
[1] 5 
> length(unique(total$COLR_N)) 
[1] 6 
> length(unique(total$dayofwk)) 
[1] 7 
> length(unique(total$SIZE_N)) 
[1] 9 
> length(unique(total$MDSE_STYL_N)) 
[1] 6 
> length(unique(total$COLR_FMLY_N)) 
[1] 4 
> length(unique(total$assort_size)) 
[1] 7 
> length(unique(total$weeknr)) 
[1] 7 

仍处于错误命令结果如下:

total_matrix <- eval(parse(text = total_matrix_str)) 
Error in `contrasts<-`(`*tmp*`, value = contr.funs[1 + isOF[nn]]) : 
    contrasts can be applied only to factors with 2 or more levels 

任何线索,为什么我可能会得到这个错误?如何通过自动检测这种情况动态地解决错误?

+0

检查数据中的“NA”值...... –

+1

也可能检查以确保您_think_中的一个变量不是一个因子实际上是一个因素(该公式中有很多变量,吨似乎检查)。 – joran

+0

@joran检查缺少分类从对比只有一个或两个级别,所以不应该去。然而一个像差是变量'SLS_TYPE_GRP_C',它具有唯一的STRING值。它会造成麻烦吗? – abhiieor

回答

0

由于一个字符串变量的唯一唯一值,此问题即将到来。用Gregor的话来说,“所有非整数/数字变量都会有对比,或者是默认的对比度,或者是您指定的对比度。对比度.arg会覆盖您指定的某些变量的默认对比度 - 任何其他分类变量都会得到默认对比度。因此,基本上所有的因子和字符串变量都不可避免地会得到对比,如果任何因子或字符串变量只有一个唯一值(即使对比没有明确定义),它们将失败。