[R] Use array interface for dense DMatrix creation #9816
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
ref #9810
This PR switches the underlying C function for DMatrix creation from dense R matrices to the
XGDMatrixCreateFromDense
function used in the python interface.Along the way, it also fixes a potential memory leak in case of failures, in which a failure to allocate an R externalptr would lead to a longjump without freeing the allocated C++ object from its pointer.
I see there was already some mechanism to create the kind of array JSON that numpy uses in the DMatrix creators from sparse matrices, but couldn't find any equivalent for dense matrices. There also seems to be a dedicated module to create JSONs, but they look simple enough for
snprintf
.The JSON parser for the config by the way seems to have issues with
nan
andinf
, so this PR makes a conversion toNaN
andInfinity
which seem to be accepted.