On Sep 16, 2009, at 9:04 PM, OKB (not okblacke) wrote:
David Winsemius wrote:
No, Reduce reduces an entire vector to a single value by
repeatedly
combining adjacent elements. I'm looking to convert a vector to
another vector where each element is some arbitrary aggregating
function applied to the first n elements of the vector.
Yes. You need to look again:
accumulate=FALSE by default, but is subject to change.-
Ah, sorry. Yes, you're right. However, this still doesn't
satisfy
my needs, because since Reduce successively combines one element at a
time, it doesn't work for functions that don't self-compose
transitively. For instance:
Reduce(mean, c(1,2,3,4), accumulate=T)
[1] 1 1 1 1
but I want
cumapply(mean, c(1,2,3,4))
[1] 1 1.5 2 2.5
Is there anything this general?
cumapply <- function (FUN, X)
{ FUN <- match.fun(FUN)
answer <- sapply(1:length(X), function(x) { FUN(X[1:x])} )
return(answer)}
cumapply(mean, c(1,2,3,4))
### [1] 1.0 1.5 2.0 2.5
--
David Winsemius, MD
Heritage Laboratories
West Hartford, CT
______________________________________________
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.