Does this do what you want? > x <- c(1,4,2,6,7,5) > x.i <- c(1,4,5) > partiMax <- function(vec, index){ + # create a vector to identify the subvectors + x.b <- diff(c(index, length(vec) + 1)) + # split up the vector + x.s <- split(vec, rep(seq_along(index), times=x.b)) + unlist(lapply(x.s, max)) + } > > partiMax(x, x.i) 1 2 3 4 6 7 > partiMax(6:1, x.i) 1 2 3 6 3 2 > >
On Jan 7, 2008 11:18 AM, Talbot Katz <[EMAIL PROTECTED]> wrote: > > Hi. > > Suppose I have a vector that I partition into disjoint, contiguous > subvectors. For example, let v = c(1,4,2,6,7,5), partition it into three > subvectors, v1 = v[1:3], v2 = v[4], v3 = v[5:6]. I want to find the maximum > element of each subvector. In this example, max(v1) is 4, max(v2) is 6, > max(v3) is 7. If I knew that the successive subvector maxima would never > decrease, as in the example, I could do the following: > > partiCmax <- function( values, seriesIdx ) { > # assume seriesIdx is increasing integer sequence beginning with 1, ending > at less than or equal to length(values) > parti <- cbind( seriesIdx, c( ( seriesIdx[ -1 ] - 1 ), length( values ) ) ) > return( cummax( values )[ parti[ , 2 ] ] ) > } > > > The use of cummax makes that pretty efficient, but if the subvector maxima > are not non-decreasing, it doesn't work. The following function works (at > least it did on the examples I tried): > > partiMax <- function( values, seriesIdx ) { > # assume seriesIdx is increasing integer sequence beginning with 1, ending > at less than or equal to length(values) > parti <- cbind( seriesIdx, c( ( seriesIdx[ -1 ] - 1 ), length( values ) ) ) > return( sapply( ( 1:length(seriesIdx) ), function ( i ) {return( max( > values[ parti[ i, 1 ]:parti[ i, 2 ] ] ) ) } ) ) > } > > > but I figured someone out there could come up with something cleverer. > Thanks! > > -- TMK --212-460-5430 home917-656-5351 cellt o p k a t z @ m s n . c o m > [[alternative HTML version deleted]] > > ______________________________________________ > 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. > -- Jim Holtman Cincinnati, OH +1 513 646 9390 What is the problem you are trying to solve? ______________________________________________ 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.