Rui - 6 months ago 33

R Question

I have two matrices:

`mat <- matrix(1:6, 2, 3)`

mat2 <- matrix(1:2, 2, 3)

and a parameter

`a <- 1`

using

`ifelse`

`a`

the code that I am using, does not work. For example:

`mat.new <- ifelse(a == 1, mat, mat2)`

Answer

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.