Robin Hankin wrote: > Hello Amin > > The partitions library does this. > > If N=4 and k=3: > > > library(partitions) > > blockparts(rep(4,3),4) > > [1,] 4 3 2 1 0 3 2 1 0 2 1 0 1 0 0 > [2,] 0 1 2 3 4 0 1 2 3 0 1 2 0 1 0 > [3,] 0 0 0 0 0 1 1 1 1 2 2 2 3 3 4 > > > > The solutions are enumerated in the columns. > > HTH > > > rksh > > Nice. You can also do it with a straightforward piece of recursive programming:
splitsum <- function(N,k) if (k==1) N else do.call(rbind, lapply(0:N, function(i) cbind(i,splitsum(N-i, k-1)))) > splitsum(4,3) i i [1,] 0 0 4 [2,] 0 1 3 [3,] 0 2 2 [4,] 0 3 1 [5,] 0 4 0 [6,] 1 0 3 [7,] 1 1 2 [8,] 1 2 1 [9,] 1 3 0 [10,] 2 0 2 [11,] 2 1 1 [12,] 2 2 0 [13,] 3 0 1 [14,] 3 1 0 [15,] 4 0 0 Or (I think there was an old Stats 1 combinatorics exercise to a similar effect) > splitsum2 <- function(N,k) t(apply(rbind(0,combn(N+k-1,k-1),N+k),2,diff)-1) > splitsum2(4,3) [,1] [,2] [,3] [1,] 0 0 4 [2,] 0 1 3 [3,] 0 2 2 [4,] 0 3 1 [5,] 0 4 0 [6,] 1 0 3 [7,] 1 1 2 [8,] 1 2 1 [9,] 1 3 0 [10,] 2 0 2 [11,] 2 1 1 [12,] 2 2 0 [13,] 3 0 1 [14,] 3 1 0 [15,] 4 0 0 Exercise for the reader: Explain! > > > > On 19 Nov 2007, at 09:57, [EMAIL PROTECTED] wrote: > > >> Dear all, >> Is there any method in R to find all possible nonnegative integer >> solutions to the linear equation with unit coefficients as follow: >> X1+X2+...+Xk=N >> Thank you, >> Amin Zollanvari >> >> -- O__ ---- Peter Dalgaard Ă˜ster Farimagsgade 5, Entr.B c/ /'_ --- Dept. of Biostatistics PO Box 2099, 1014 Cph. K (*) \(*) -- University of Copenhagen Denmark Ph: (+45) 35327918 ~~~~~~~~~~ - ([EMAIL PROTECTED]) FAX: (+45) 35327907 ______________________________________________ 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.