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.

Reply via email to