Fix Cdist - Preserve dimensions when casting a vector to double #99
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.
Using FastR release 19.2.0.1 the following code
results in
Error: 'x' must be a square matrix
.The R function
dist
calls the C functionCdist
defined in stats/src/distance.c. This function does not check whether its first argument is a matrix, but it checks the type of its elements:FastR implements the Java function
Cdist
, which checks whether its first argument is a matrix--not a square matrix--and if the test fails it throwsThrowing this error is wrong, because it does not correspond to the test that failed and because R's
Cdist
works for rectangular matrices. TheMessage
enum is defined in RError.java.The problem is that the argument
x
is casted to double without preserving its dimensions, resulting in a 1D vector. This patch corrects this.To try it
make clean
incom.oracle.truffle.r.native
and runmx build
on the project root.I suspect that this mistake in casting vectors to double without preserving their dimensions occurs in other places in FastR.