From 29a7027dbab2f98665355643738262df1aa68758 Mon Sep 17 00:00:00 2001 From: tqchen Date: Mon, 1 Sep 2014 22:50:48 -0700 Subject: [PATCH] fix the zero length vector --- R-package/R/utils.R | 8 +++++--- R-package/src/xgboost_R.cpp | 7 ++++++- 2 files changed, 11 insertions(+), 4 deletions(-) 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);