| 226 | |
| 227 | |
| 228 | EXPORT_FUNCTION CatBoostCreateFromMatrix_R(SEXP floatAndCatMatrixParam, |
| 229 | SEXP targetParam, |
| 230 | SEXP catFeaturesIndicesParam, |
| 231 | SEXP textMatrixParam, |
| 232 | SEXP textFeaturesIndicesParam, |
| 233 | SEXP pairsParam, |
| 234 | SEXP graphParam, |
| 235 | SEXP weightParam, |
| 236 | SEXP groupIdParam, |
| 237 | SEXP groupWeightParam, |
| 238 | SEXP subgroupIdParam, |
| 239 | SEXP pairsWeightParam, |
| 240 | SEXP baselineParam, |
| 241 | SEXP featureNamesParam, |
| 242 | SEXP classLabelsParam) { |
| 243 | SEXP result = NULL; |
| 244 | R_API_BEGIN(); |
| 245 | SEXP dataDim = floatAndCatMatrixParam != R_NilValue ? |
| 246 | getAttrib(floatAndCatMatrixParam, R_DimSymbol) : |
| 247 | getAttrib(textMatrixParam, R_DimSymbol); |
| 248 | ui32 dataRows = SafeIntegerCast<ui32>(INTEGER(dataDim)[0]); |
| 249 | ui32 floatAndCatColumns = floatAndCatMatrixParam == R_NilValue ? 0 : |
| 250 | SafeIntegerCast<ui32>(INTEGER(getAttrib(floatAndCatMatrixParam, R_DimSymbol))[1]); |
| 251 | ui32 textColumns = textMatrixParam == R_NilValue ? 0 : |
| 252 | SafeIntegerCast<ui32>(INTEGER(getAttrib(textMatrixParam, R_DimSymbol))[1]); |
| 253 | ui32 dataColumns = floatAndCatColumns + textColumns; |
| 254 | SEXP targetDim = getAttrib(targetParam, R_DimSymbol); |
| 255 | ui32 targetRows = 0; |
| 256 | ui32 targetColumns = 0; |
| 257 | if (targetDim != R_NilValue) { |
| 258 | targetRows = SafeIntegerCast<ui32>(INTEGER(targetDim)[0]); |
| 259 | targetColumns = SafeIntegerCast<ui32>(INTEGER(targetDim)[1]); |
| 260 | } |
| 261 | SEXP baselineDim = getAttrib(baselineParam, R_DimSymbol); |
| 262 | size_t baselineRows = 0; |
| 263 | size_t baselineColumns = 0; |
| 264 | if (baselineParam != R_NilValue) { |
| 265 | baselineRows = static_cast<size_t>(INTEGER(baselineDim)[0]); |
| 266 | baselineColumns = static_cast<size_t>(INTEGER(baselineDim)[1]); |
| 267 | } |
| 268 | |
| 269 | auto loaderFunc = [&] (IRawFeaturesOrderDataVisitor* visitor) { |
| 270 | TDataMetaInfo metaInfo; |
| 271 | |
| 272 | TVector<TString> featureId; |
| 273 | featureId.reserve(dataColumns); |
| 274 | if (featureNamesParam != R_NilValue) { |
| 275 | for (size_t i = 0; i < dataColumns; ++i) { |
| 276 | featureId.push_back(CHAR(asChar(VECTOR_ELT(featureNamesParam, i)))); |
| 277 | } |
| 278 | } |
| 279 | |
| 280 | metaInfo.FeaturesLayout = MakeIntrusive<TFeaturesLayout>( |
| 281 | dataColumns, |
| 282 | ToUnsigned(GetVectorFromNullableSEXP<int>(catFeaturesIndicesParam, "cat_features_indices"_sb)), |
| 283 | ToUnsigned(GetVectorFromNullableSEXP<int>(textFeaturesIndicesParam, "text_features_indices"_sb)), |
| 284 | TVector<ui32>{}, // TODO(akhropov) support embedding features in R |
| 285 | featureId); |
nothing calls this directly
no test coverage detected