Combinatorical partial sum
combinatorics, numbers, r
Solution
Here is one using recursion. (Not making claims about it being efficient either)
partial.sum <- function(x) {
slave <- function(x) {
if (length(x)) {
y <- Recall(x[-1])
c(y + 0, y + x[1])
} else 0
}
sort(unique(slave(x)[-1]))
}
partial.sum(c(2,5,10))
# [1] 2 5 7 10 12 15 17
Edit: well, turns out it is a little faster than I thought:
x <- 1:20
microbenchmark(flodel(x), dason(x), matthew(x), times = 10)
# Unit: milliseconds
# expr min lq median uq max neval
# flodel(x) 86.31128 86.9966 94.12023 125.1013 163.5824 10
# dason(x) 2407.27062 2461.2022 2633.73003 2846.2639 3031.7250 10
# matthew(x) 3084.59227 3191.7810 3304.36064 3693.8595 3883.2767 10
(I added `sort` and/or `unique` to dason and matthew's functions where appropriate for fair comparison.)
Problem
I am looking in `R` for a function `partial.sum()` which takes a vector of numbers and returns an ascending sorted vector of all partial sums: ``` test=c(2,5,10) partial.sum(test) # 2 5 7 10 12 15 17 ## 2 is the sum of element 2 ## 5 is the sum of element 5 ## 7 is the sum of elements 2 & 5 ## 10 is the sum of element 10 ## 12 is the sum of elements 2 & 10 ## 15 is the sum of elements 5 & 10 ## 17 is the sum of elements 2 & 5 & 10 ```