From: Marc Schwartz <marc_schwartz_at_comcast.net>

Date: Mon, 07 Jan 2008 10:44:20 -0600

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. Received on Mon 07 Jan 2008 - 16:47:45 GMT

Date: Mon, 07 Jan 2008 10:44:20 -0600

Talbot Katz 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!
*

It is not clear how you are creating the partitions, but if you are (hopefully) ending up with a list, such as:

> Vec.List

$v1

[1] 1 4 2

$v2

[1] 6

$v3

[1] 7 5

Then you can use:

> sapply(Vec.List, max, na.rm = TRUE)

v1 v2 v3

4 6 7

See ?sapply for more information.

**HTH,
**
Marc Schwartz

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. Received on Mon 07 Jan 2008 - 16:47:45 GMT

Archive maintained by Robert King, hosted by
the discipline of
statistics at the
University of Newcastle,
Australia.

Archive generated by hypermail 2.2.0, at Mon 07 Jan 2008 - 18:30:05 GMT.

*
Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-help.
Please read the posting
guide before posting to the list.
*