2016-09-14 3 views
0

나는 동적 문자열을 사용하여 model.matrix을 만듭니다. 다음과 같은 오류가Model.matrix 대비 오류

여전히
> 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_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)))" 

는 범주 형 변수의 서로 다른 값 계산됩니다 다음과 같이 문자열 값입니다

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

또한 당신이 생각하지 않는 변수 중 하나가 실제로 요인인지 확인하십시오 (실제로 해당 요인에 많은 변수가 있습니다. t는 점검하는 것처럼 보였다). – joran

+0

@joran 명암 대조에서 누락 된 항목을 선택했는지 한두 단계 만 확인 했으므로 안됩니다. 그러나 하나의 수차는 유일한 STRING 값을 갖는 변수'SLS_TYPE_GRP_C'입니다. 문제를 일으킬 수 있습니까? – abhiieor

답변

0

이 문제는 문자열 변수 하나의 고유 한 값 때문에 발생합니다. 그레고리 (Gregor)의 말에 따르면 "모든 정수/숫자가 아닌 변수는 기본 대비 또는 지정한 것 중 하나를 대조 할 수 있습니다 .contents.arg는 지정한 특정 변수의 기본 대비를 무시하며 다른 모든 범주 변수는 기본 대비를 얻습니다." 따라서 본질적으로 모든 요소와 문자열 변수는 필연적으로 대비를 가져 오며, 요소 나 문자열 변수가 하나의 고유 값을 가지면 (심지어 명암이 명시 적으로 정의되지 않은 경우에도) 실패합니다.