[R] code for "permutative" operation

David Winsemius dwinsemius at comcast.net
Mon Mar 14 21:09:10 CET 2011


On Mar 14, 2011, at 3:52 PM, Sascha Vieweg wrote:

> Hello, I need some form of a "permutative" operation on a numeric  
> vector x
>
> x = (v1, v2, v3, ..., vN)
>
> that produces
>
> x.r = (v1, v1+2, v1+v2+v3, ... v1+v2+...+vN)
>
> If the operation is sum() I can run
>
> x <- 5:8
> m <- matrix(rep(x, length(x)), ncol=length(x))
> (x.r <- rowsum(m * upper.tri(m, diag=TRUE), rep(1, length(x))))
>
> But there's two things I don't know and kindly request help or  
> comments upon:
>
> (1) What is the fastest code to perfom the forestanding operation?
>
> (2) Is there a more general function for tasks like this, not only  
> with the sum procedure applied to the vector? Specifically, the  
> zeros in the matrix may cause problems with other operations than sum.

Perhaps this:

 > fplus <- function(x, y) paste(x,y, sep="+")
 > Reduce(fplus, vv, accumulate=TRUE)
  [1] "v1"                             "v1+v2"
  [3] "v1+v2+v3"                       "v1+v2+v3+v4"
  [5] "v1+v2+v3+v4+v5"                 "v1+v2+v3+v4+v5+v6"
  [7] "v1+v2+v3+v4+v5+v6+v7"           "v1+v2+v3+v4+v5+v6+v7+v8"
  [9] "v1+v2+v3+v4+v5+v6+v7+v8+v9"     "v1+v2+v3+v4+v5+v6+v7+v8+v9+v10"

-- 

David Winsemius, MD
West Hartford, CT



More information about the R-help mailing list