Skip to content

Rfast::rowRanks(..., method = "min") returns incorrect results for rows with constant values #138

@Huimin721

Description

@Huimin721

Describe the bug

Rfast::rowRanks(..., method = "min") returns incorrect results for rows with constant values. For example, a row with all identical values returns 1 1 1 0 instead of all equal ranks. I also observed that rowRanks() may crash R on a single-column matrix.

To Reproduce

library(Rfast)

x = matrix(rep(5, 4), nrow = 1)
Rfast::rowRanks(x, method = "min")

t(apply(x, 1, rank, ties.method = "min"))

This gives:

[,1] [,2] [,3] [,4]
[1,] 1 1 1 0

while base R gives:

[,1] [,2] [,3] [,4]
[1,] 1 1 1 1

I also observed a crash with a single-column matrix:

z = matrix(c(5, 5, 5, 5), ncol = 1)
Rfast::rowRanks(z, method = "min")

On my machine this causes a segfault.

Expected behavior

For a row where all values are equal, all returned ranks should also be equal. So for

matrix(rep(5, 4), nrow = 1)

I expect:

[,1] [,2] [,3] [,4]
[1,] 1 1 1 1

which matches:

t(apply(x, 1, rank, ties.method = "min"))

Desktop :

OS: macOS
R version 4.3.1
Rfast-Version: 2.1.5.1

Additional context

I encountered this while using rowRanks() for row-wise ranking with ties. I also observed similar behavior in colRanks(method = "min"), where constant columns do not appear to be handled correctly.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions