-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Description
As André Gillibert wrote on r-devel, it would seem desirable for ifelse to behave similarly to it's mathematical cousin expression test * yes + (1 - test) * no.
Currently at least the handling of various combinations of scalar, matrix and vector inputs is quite different:
library(ifelse)
math_ifelse <- function(test, yes, no) {
storage.mode(test) <- "logical"
test * yes + (1 - test) * no
}
scalar <- 0
vector <- 0:1
matrix <- matrix(0:3, 2, 2)
ifelse1(scalar, vector, matrix)
#> [1] 0
math_ifelse(scalar, vector, matrix)
#> [,1] [,2]
#> [1,] 0 2
#> [2,] 1 3
ifelse1(scalar, matrix, vector)
#> [1] 0
math_ifelse(scalar, matrix, vector)
#> [,1] [,2]
#> [1,] 0 0
#> [2,] 1 1
ifelse1(vector, matrix, scalar)
#> [1] 0 1
math_ifelse(vector, matrix, scalar)
#> [,1] [,2]
#> [1,] 0 0
#> [2,] 1 3
ifelse1(vector, scalar, matrix)
#> [1] 0 0
math_ifelse(vector, scalar, matrix)
#> [,1] [,2]
#> [1,] 0 2
#> [2,] 0 0
ifelse1(matrix, vector, scalar)
#> [1] 0 1 0 1
math_ifelse(matrix, vector, scalar)
#> [,1] [,2]
#> [1,] 0 0
#> [2,] 1 1
ifelse1(matrix, scalar, vector)
#> [1] 0 0 0 0
math_ifelse(matrix, scalar, vector)
#> [,1] [,2]
#> [1,] 0 0
#> [2,] 0 0Created on 2025-08-02 with reprex v2.1.1
Related to #1.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels