diff --git a/R-package/R/utils.R b/R-package/R/utils.R index 015026fe6..da602478a 100644 --- a/R-package/R/utils.R +++ b/R-package/R/utils.R @@ -121,8 +121,8 @@ xgb.iter.eval <- function(booster, watchlist, iter) { stop("xgb.eval: watch list can only contain xgb.DMatrix") } } - evnames <- list() if (length(watchlist) != 0) { + evnames <- list() for (i in 1:length(watchlist)) { w <- watchlist[i] if (length(names(w)) == 0) { @@ -130,8 +130,10 @@ xgb.iter.eval <- function(booster, watchlist, iter) { } evnames <- append(evnames, names(w)) } + msg <- .Call("XGBoosterEvalOneIter_R", booster, as.integer(iter), watchlist, + evnames, PACKAGE = "xgboost") + } else { + msg <- "" } - msg <- .Call("XGBoosterEvalOneIter_R", booster, as.integer(iter), watchlist, - evnames, PACKAGE = "xgboost") return(msg) } diff --git a/R-package/src/xgboost_R.cpp b/R-package/src/xgboost_R.cpp index ac5934d17..f255d233d 100644 --- a/R-package/src/xgboost_R.cpp +++ b/R-package/src/xgboost_R.cpp @@ -197,7 +197,12 @@ extern "C" { for (int i = 0; i < len; ++i){ dvec.push_back(R_ExternalPtrAddr(VECTOR_ELT(dmats, i))); } - void *handle = XGBoosterCreate(&dvec[0], dvec.size()); + void *handle; + if (dvec.size() == 0) { + handle = XGBoosterCreate(NULL, 0); + } else { + handle = XGBoosterCreate(&dvec[0], dvec.size()); + } SEXP ret = PROTECT(R_MakeExternalPtr(handle, R_NilValue, R_NilValue)); R_RegisterCFinalizerEx(ret, _BoosterFinalizer, TRUE); UNPROTECT(1);