[R] Vector-subsetting with ZERO - Is behavior changeable?

Johannes Graumann johannes_graumann at web.de
Wed Oct 5 13:29:15 CEST 2011


Dear All,

I have trouble generizising some code.

> index <- 0
> sapply(list(c(1,2,3),c(1,2),c(1)),function(x){x[max(length(x)-index,0)]})
Will yield a wished for vector like so:
[1] 3 2 1

But in this case (trying to select te second to last element in each vector 
of the list)
> index <- 1
> sapply(list(c(1,2,3),c(1,2),c(1)),function(x){x[max(length(x)-index,0)]})
I end up with 
[[1]]
[1] 2

[[2]]
[1] 1

[[3]]
numeric(0)

I would (massively) prefer something like
[1] 2 1 NA

My current implementation looks like
> index <- 1
> unlist(
>  sapply(
>   list(c(1,2,3),c(1,2),c(1)),
>   function(x){
>     value <- x[max(length(x)-index,0)]
>     if(identical(value,numeric(0))){return(NA)} else {return(value)}
>   }
>  )
> )
[1]  2  1 NA

Quite the inelegant eyesore.

Any hints on how to do this better?

Thanks, Joh



More information about the R-help mailing list