[R] code for "permutative" operation
Sascha Vieweg
saschaview at gmail.com
Mon Mar 14 21:16:38 CET 2011
On 11-03-14 21:09, David Winsemius wrote:
> 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"
Thanks, David, after trying around I found that one:
x <- 5:8
sapply(1:length(x), function(y) sum(x[1:y]))
I keep your code in my records for operations that cannot be
applied with function names.
--
Sascha Vieweg, saschaview at gmail.com
More information about the R-help
mailing list