Thank you very much. Learned something again! Joh
William Dunlap wrote: > You can use [1] on the output of FUN to ensure that > exactly one value (perhaps NA from numeric(0)[1]) is > returned. E.g. > > > index <- 1 > > sapply(list(c(1,2,3),c(1,2),c(1)),function(x){x[max(length(x)- index,0)][1]}) > [1] 2 1 NA > > I'll also put in a plug for vapply, which throws an > error if FUN does not return what you expect it to: > > > vapply(list(c(1,2,3),c(1,2),c(1)),function(x){x[max(length(x)- index,0)]}, > > FUN.VALUE=numeric(1)) > Error in vapply(list(c(1, 2, 3), c(1, 2), c(1)), function(x) { : > values must be length 1, > but FUN(X[[3]]) result is length 0 > > vapply(list(c(1,2,3),c(1,2),c(1)),function(x){x[max(length(x)- index,0)][1]}, > > FUN.VALUE=numeric(1)) > [1] 2 1 NA > > For long input vectors vapply can save a fair bit of > memory and time over sapply. > > Bill Dunlap > Spotfire, TIBCO Software > wdunlap tibco.com > >> -----Original Message----- >> From: r-help-boun...@r-project.org [mailto:r-help-boun...@r-project.org] >> On Behalf Of Johannes Graumann >> Sent: Wednesday, October 05, 2011 4:29 AM >> To: r-h...@stat.math.ethz.ch >> Subject: [R] Vector-subsetting with ZERO - Is behavior changeable? >> >> 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 >> >> ______________________________________________ >> R-help@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. ______________________________________________ R-help@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.