【发布时间】:2016-09-15 16:58:07
【问题描述】:
我有一个动态字符串来创建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
任何线索为什么我可能会收到此错误?如何通过自动检测这种情况来动态解决错误?
【问题讨论】:
-
检查数据中的
NA值... -
还可能会检查以确保您认为不是因素的变量之一实际上是因素(该公式中有很多变量没有似乎检查)。
-
@joran 检查从对比中丢失的分类只有一两个级别,所以不应该去。然而,一种像差是变量
SLS_TYPE_GRP_C,它具有唯一的 STRING 值。会不会惹麻烦? -
@abhiieor 抱歉,我很难理解您在最后一条评论中所说的内容。如果
SLS_TYPE_GRP_C不是整数或数字,并且只有一个唯一值,那么是的,这可能会导致问题。 -
所有非整数/数字变量都会有对比,无论是默认对比还是您指定的对比。您的
contrasts.arg会覆盖您指定的某些变量的默认对比 - 任何其他分类变量都将获得默认对比。
标签: r categorical-data