Return a matrix with `ifelse`

if-statement, r

Solution

The length of the return is completely decided by `length(a == 1)`. See also the helpfile with `?ifelse`. Your code will only return a single value.

`ifelse` targets vector input / output. Even if you get the length correct, say: `ifelse(rep(TRUE, 6), mat, mat2)`, you get a vector rather than a matrix output. So an outer `matrix` call to reset dimension is necessary.

Tip 1:

For your example, looks like a simple `result <- if (a == 1) mat else mat2` is sufficient. No need to touch `ifelse`.

Tip 2:

It is not impossible to ask `ifelse` to return a matrix, but you have to protect it by a list (remember a list is a vector):

ifelse(TRUE, list(mat), list(mat2))

But, this is inconvenient.

Problem

I have two matrices: ``` mat <- matrix(1:6, 2, 3) mat2 <- matrix(1:2, 2, 3) ``` and a parameter ``` a <- 1 ``` using `ifelse`, is it possible to return a matrix when `a` is a certain value? the code that I am using, does not work. For example: ``` mat.new <- ifelse(a == 1, mat, mat2) ```

Original source