diff --git a/R-package/R/xgb.cv.R b/R-package/R/xgb.cv.R index c290fba8b..f2dd00e89 100644 --- a/R-package/R/xgb.cv.R +++ b/R-package/R/xgb.cv.R @@ -119,6 +119,22 @@ xgb.cv <- function(params=list(), data, nrounds, nfold, label = NULL, missing = params <- append(params, list("eval_metric"=mc)) } + # customized objective and evaluation metric interface + if (!is.null(params$objective) && !is.null(obj)) + stop("xgb.cv: cannot assign two different objectives") + if (!is.null(params$objective)) + if (class(params$objective)=='function') { + obj = params$objective + params$objective = NULL + } + if (!is.null(params$eval_metric) && !is.null(feval)) + stop("xgb.cv: cannot assign two different evaluation metrics") + if (!is.null(params$eval_metric)) + if (class(params$eval_metric)=='function') { + feval = params$eval_metric + params$eval_metric = NULL + } + # Early Stopping if (is.null(early_stop_round) && !is.null(early.stop.round)) early_stop_round = early.stop.round diff --git a/R-package/R/xgb.train.R b/R-package/R/xgb.train.R index 99eee2b0f..795a62eb1 100644 --- a/R-package/R/xgb.train.R +++ b/R-package/R/xgb.train.R @@ -140,6 +140,22 @@ xgb.train <- function(params=list(), data, nrounds, watchlist = list(), } params = append(params, list(...)) + # customized objective and evaluation metric interface + if (!is.null(params$objective) && !is.null(obj)) + stop("xgb.train: cannot assign two different objectives") + if (!is.null(params$objective)) + if (class(params$objective)=='function') { + obj = params$objective + params$objective = NULL + } + if (!is.null(params$eval_metric) && !is.null(feval)) + stop("xgb.train: cannot assign two different evaluation metrics") + if (!is.null(params$eval_metric)) + if (class(params$eval_metric)=='function') { + feval = params$eval_metric + params$eval_metric = NULL + } + # Early stopping if (is.null(early_stop_round) && !is.null(early.stop.round)) early_stop_round = early.stop.round