diff --git a/R-package/src/xgboost_R.cc b/R-package/src/xgboost_R.cc index 82ba36828..dcf1228ce 100644 --- a/R-package/src/xgboost_R.cc +++ b/R-package/src/xgboost_R.cc @@ -229,27 +229,6 @@ SEXP XGBoosterCreate_R(SEXP dmats) { return ret; } -SEXP XGBoosterGetAttr_R(SEXP handle, SEXP name) { - const char* ret; - R_API_BEGIN(); - int success; - CHECK_CALL(XGBoosterGetAttr(R_ExternalPtrAddr(handle), - CHAR(asChar(name)), - &ret, - &success)); - R_API_END(); - return mkString(ret); -} - -SEXP XGBoosterSetAttr_R(SEXP handle, SEXP name, SEXP val) { - R_API_BEGIN(); - CHECK_CALL(XGBoosterSetAttr(R_ExternalPtrAddr(handle), - CHAR(asChar(name)), - CHAR(asChar(val)))); - R_API_END(); - return R_NilValue; -} - SEXP XGBoosterSetParam_R(SEXP handle, SEXP name, SEXP val) { R_API_BEGIN(); CHECK_CALL(XGBoosterSetParam(R_ExternalPtrAddr(handle), @@ -388,3 +367,32 @@ SEXP XGBoosterDumpModel_R(SEXP handle, SEXP fmap, SEXP with_stats) { R_API_END(); return out; } + +SEXP XGBoosterGetAttr_R(SEXP handle, SEXP name) { + SEXP out; + R_API_BEGIN(); + int success; + const char *val; + CHECK_CALL(XGBoosterGetAttr(R_ExternalPtrAddr(handle), + CHAR(asChar(name)), + &val, + &success)); + if (success) { + out = PROTECT(allocVector(STRSXP, 1)); + SET_STRING_ELT(out, 0, mkChar(val)); + } else { + out = PROTECT(R_NilValue); + } + UNPROTECT(1); + R_API_END(); + return out; +} + +SEXP XGBoosterSetAttr_R(SEXP handle, SEXP name, SEXP val) { + R_API_BEGIN(); + CHECK_CALL(XGBoosterSetAttr(R_ExternalPtrAddr(handle), + CHAR(asChar(name)), + CHAR(asChar(val)))); + R_API_END(); + return R_NilValue; +} diff --git a/R-package/src/xgboost_R.h b/R-package/src/xgboost_R.h index 1d8e2d567..daf304529 100644 --- a/R-package/src/xgboost_R.h +++ b/R-package/src/xgboost_R.h @@ -101,23 +101,6 @@ XGB_DLL SEXP XGDMatrixNumCol_R(SEXP handle); */ XGB_DLL SEXP XGBoosterCreate_R(SEXP dmats); -/*! - * \brief get learner attribute value - * \param handle handle - * \param name attribute name - * \return string containing attribute value - */ -XGB_DLL SEXP XGBoosterGetAttr_R(SEXP handle, SEXP name); - -/*! - * \brief set learner attribute value - * \param handle handle - * \param name attribute name - * \param val attribute value - * \return R_NilValue - */ -XGB_DLL SEXP XGBoosterSetAttr_R(SEXP handle, SEXP name, SEXP val); - /*! * \brief set parameters * \param handle handle @@ -202,4 +185,22 @@ XGB_DLL SEXP XGBoosterModelToRaw_R(SEXP handle); * \param with_stats whether dump statistics of splits */ XGB_DLL SEXP XGBoosterDumpModel_R(SEXP handle, SEXP fmap, SEXP with_stats); + +/*! + * \brief get learner attribute value + * \param handle handle + * \param name attribute name + * \return character containing attribute value + */ +XGB_DLL SEXP XGBoosterGetAttr_R(SEXP handle, SEXP name); + +/*! + * \brief set learner attribute value + * \param handle handle + * \param name attribute name + * \param val attribute value + * \return R_NilValue + */ +XGB_DLL SEXP XGBoosterSetAttr_R(SEXP handle, SEXP name, SEXP val); + #endif // XGBOOST_WRAPPER_R_H_ // NOLINT(*)