2016-09-14 25 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會覆蓋您指定的某些變量的默認對比度 - 任何其他分類變量都會得到默認對比度。因此,基本上所有的因子和字符串變量都不可避免地會得到對比,如果任何因子或字符串變量只有一個唯一值(即使對比沒有明確定義),它們將失敗。