diff --git a/R-package/R/slice.xgb.DMatrix.R b/R-package/R/slice.xgb.DMatrix.R index 419170a66..b70a8ee92 100644 --- a/R-package/R/slice.xgb.DMatrix.R +++ b/R-package/R/slice.xgb.DMatrix.R @@ -28,6 +28,18 @@ setMethod("slice", signature = "xgb.DMatrix", if (class(object) != "xgb.DMatrix") { stop("slice: first argument dtrain must be xgb.DMatrix") } - ret <- .Call("XGDMatrixSliceDMatrix_R", object, idxset, PACKAGE = "xgboost") + ret <- .Call("XGDMatrixSliceDMatrix_R", object, idxset, + PACKAGE = "xgboost") + + attr_list <- attributes(object) + nr <- xgb.numrow(object) + len <- sapply(attr_list,length) + ind <- which(len==nr) + if (length(ind)>0) { + nms <- names(attr_list)[ind] + for (i in 1:length(ind)) { + attr(ret,nms[i]) <- attr(object,nms[i])[idxset] + } + } return(structure(ret, class = "xgb.DMatrix")) })