Return a matrix with `ifelse`

前端 未结 1 1838
-上瘾入骨i
-上瘾入骨i 2020-12-04 02:37

I have two matrices:

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

and a parameter

a <- 1

相关标签:
1条回答
  • 2020-12-04 03:04

    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.

    0 讨论(0)
提交回复
热议问题