# XgBoost error: contrasts can be applied only to factors with 2 or more levels

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

param <- list(  objective           = "binary:logistic",
booster             = "gbtree",
eval_metric         = "auc",
eta                 = 0.01,
max_depth           = 5,
subsample           = 0.6,
colsample_bytree    = 0.6
)

t1.y <- t1$target t1 <- sparse.model.matrix(target ~ ., data = t1) #Error occurs after the above command. If i change the above statement to (replacing . by -1 to drop collinear columns) t1 <- sparse.model.matrix(target ~ -1, data = t1)  No error occurs after changing to -1 but the dgcMatrix that is generated looks suspicious as it contains just one column and lot of rows. I was expecting the columns of the original matrix to be one-hot encoded rather than getting one columns as an output. If i proceed further ignoring the inspection of generated sparse matrix then I get an error after i run the xgboost below: Error in xgb.iter.update(bst$handle, dtrain, iteration - 1, obj) :
[05:14:55] amalgamation/../src/objective/regression_obj.cc:108: label must be in [0,1] for logistic regression

dtrain <- xgb.DMatrix(data=t1, label=t1.y)
watchlist <- list(train=dtrain)
bst1 <- xgboost(   params              = param,
data                = dtrain,
nrounds             = 1750,
#watchlist           = watchlist,
verbose             = 1,
maximize            = FALSE
)


I tried to convert the target column to both factor and numeric (converted it to 0 & 1, since as.numeric converts it to 1 & 2). But it did not help :'(

When I convert the target to numeric then after running the Xgboost, I get the following error : Error in xgb.iter.update(bst\$handle, dtrain, iteration - 1, obj) : [05:20:12] amalgamation/../src/tree/updater_colmaker.cc:162: Check failed: (n) > (0) colsample_bytree=0.6 is too small that no feature can be included

*t1 is a data.frame initially containing factor,numeric and integers which i am converting to sparse matrix

Thanks for the help!