[R] A question on function return

Peter Ehlers ehlers at ucalgary.ca
Fri Mar 22 20:09:55 CET 2013


On 2013-03-22 11:43, Christofer Bogaso wrote:
> Hello again,
>
> Let say I have following user defined function:
>
> fn <- function(x, y) {
> 		Vec1 <- letters[1:6]
> 		Vec2 <- 1:5
> 		return(list(ifelse(x > 0, Vec1, NA), ifelse(y > 0, Vec2, NA)))
> 	}
>
> Now I have following calculation:
>
>> fn(-3, -3)
> [[1]]
> [1] NA
>
> [[2]]
> [1] NA
>
>> fn(3, -3)
> [[1]]
> [1] "a"
>
> [[2]]
> [1] NA
>
>
> Here I can not understand why in the second case, I get only the first
> element "a" of the corresponding vector 'Vec1'? I want to get complete
> vector(s) as the function return.
>
> Can somebody help me how to achieve that?

 From help(ifelse):
   "ifelse returns a value with the same shape as test"

i.e. in your case, the same 'shape' as 'x > 0', a single value.
You _could_ make ifelse() work with, e.g., ifelse(rep(x, 6) > 0, ....)
but you probably want if() instead.

Peter Ehlers



More information about the R-help mailing list