[R] A question on function return

Rui Barradas ruipbarradas at sapo.pt
Fri Mar 22 19:53:56 CET 2013


Hello,

You get only one value because ifelse is vectorized, and the condition 
has length(x > 0) == 1. (You get as many values as there are in the 
condition.) Try instead


fn2 <- function(x, y) {
	Vec1 <- letters[1:6]
	Vec2 <- 1:5
	list(if(x > 0) Vec1 else NA, if(y > 0) Vec2 else NA)
}

fn2(-3, -3)
fn2(3, -3)


Hope this helps,

Rui Barradas

Em 22-03-2013 18:43, Christofer Bogaso escreveu:
> 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?
>
> Thanks and regards,
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>



More information about the R-help mailing list