Здесь довольно грубое силовое решение.
genInt <- function(n, z) {
stopifnot(n <= z)
repeat {
s <- sample(1:ceiling(z/n), n, replace=TRUE)
if (sum(s) == z)
break
}
return(s)
}
set.seed(65222)
(r1 <- genInt(5, 7))
# [1] 1 2 1 1 2
(r2 <- genInt(10, 56))
# [1] 6 6 6 6 6 5 6 6 6 3
# Sum check
sapply(list(r1=r1, r2=r2), sum)
# r1 r2
# 7 56