I need to get all combinations for which the sum equal 100 using 8 variables that could take any value from 0 to 100 by incremental step of 10. (i.e. 0, 10, 20 ... 100)
followed by Stéphane Laurent's answer, I am able to get a super fast solution by using the uniqueperm2 function here.
library(partitions)
C = t(restrictedparts(10,8))
do.call(rbind, lapply(1:nrow(C),function(i)uniqueperm2(C[i,])))
Update, there is faster solution using iterpc the package.
library(partitions)
library(iterpc)
C = t(restrictedparts(10,8))
do.call(rbind, lapply(1:nrow(C),function(i) getall(iterpc(table(C[i,]), order=T))))
It is about twice the speed of the uniqueperm2
> f <- function(){
do.call(rbind, lapply(1:nrow(C),function(i)uniqueperm2(C[i,])))
}
> g <- function(){
do.call(rbind, lapply(1:nrow(C),function(i) getall(iterpc(table(C[i,]), order=T))))
}
> microbenchmark(f(),g())
Unit: milliseconds
expr min lq mean median uq max neval cld
f() 36.37215 38.04941 40.43063 40.07220 42.29389 46.92574 100 b
g() 16.77462 17.45665 19.46206 18.10101 20.65524 64.11858 100 a