| 646 | } |
| 647 | |
| 648 | EXPORT_FUNCTION CatBoostSumModels_R(SEXP modelsParam, |
| 649 | SEXP weightsParam, |
| 650 | SEXP ctrMergePolicyParam) { |
| 651 | SEXP result = NULL; |
| 652 | R_API_BEGIN(); |
| 653 | const auto weights = GetVectorFromNullableSEXP<double>(weightsParam, "weights"_sb); |
| 654 | ECtrTableMergePolicy mergePolicy; |
| 655 | CB_ENSURE(TryFromString<ECtrTableMergePolicy>(CHAR(asChar(ctrMergePolicyParam)), mergePolicy), |
| 656 | "Unknown value of ctr_table_merge_policy: " << CHAR(asChar(ctrMergePolicyParam))); |
| 657 | |
| 658 | TVector<TFullModelConstPtr> models; |
| 659 | for (int idx = 0; idx < length(modelsParam); ++idx) { |
| 660 | TFullModelHandle model = static_cast<TFullModelHandle>(R_ExternalPtrAddr(VECTOR_ELT(modelsParam, idx))); |
| 661 | models.push_back(model); |
| 662 | } |
| 663 | TFullModelPtr modelPtr = std::make_unique<TFullModel>(); |
| 664 | SumModels(models, weights, /*modelParamsPrefixes*/{}, mergePolicy).Swap(*modelPtr); |
| 665 | result = PROTECT(R_MakeExternalPtr(modelPtr.get(), R_NilValue, R_NilValue)); |
| 666 | R_RegisterCFinalizerEx(result, _Finalizer<TFullModelHandle>, TRUE); |
| 667 | modelPtr.release(); |
| 668 | R_API_END(); |
| 669 | UNPROTECT(1); |
| 670 | return result; |
| 671 | } |
| 672 | |
| 673 | EXPORT_FUNCTION CatBoostCV_R(SEXP fitParamsAsJsonParam, |
| 674 | SEXP poolParam, |