Произведите случайным образом ненулевые натуральные числа так, чтобы сумма была постоянной в R - PullRequest
0 голосов
/ 14 марта 2020

Я хочу сгенерировать 'n' random ненулевые положительные целые числа так, чтобы сумма всех целых чисел была постоянной. Например: я хочу сгенерировать 5 ненулевых натуральных чисел (обратите внимание, что они случайным образом распределены), сумма которых равна 7.

Как я могу сделать это в R?

Ответы [ 3 ]

2 голосов
/ 14 марта 2020
N <- 5
as.numeric(table(append(seq(1, N), sample.int(N, 7 - N, replace=TRUE))))
1 голос
/ 14 марта 2020

Здесь довольно грубое силовое решение.

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 
0 голосов
/ 17 марта 2020
n <- 5
total <- 7
1 + rmultinom(1, total-n, rep(1,n))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...