Kotlin / dataframe

Structured data processing in Kotlin
https://kotlin.github.io/dataframe/overview.html
Apache License 2.0
821 stars 58 forks source link

`median` is broken for "mixed" number types #566

Open cmelchior opened 8 months ago

cmelchior commented 8 months ago

If you have a DataFrame consisting of a mix of Number types, calling median on it will break.

Example:

val df = dataFrameOf("a")(
    1, 
    2L,
    2.0f,
    3.0,
)
df.median("a")

Will throw:

java.lang.ClassCastException: class java.lang.Long cannot be cast to class java.lang.Integer (java.lang.Long and java.lang.Integer are in module java.base of loader 'bootstrap') at java.base/java.lang.Integer.compareTo(Integer.java:59) at org.jetbrains.kotlinx.dataframe.math.MedianKt.quickSelect(median.kt:43)

Jolanrensen commented 8 months ago

Yup, as mentioned here https://github.com/Kotlin/dataframe/issues/558 only Comparable is supported, Number is not supported (yet) but can still be called. This should be fixed indeed. I would say Number should be attempted to be converted toDouble() if it's not a known type.