Функция деления числа на n целое число с приложением. тот же размер

Например, у меня есть 10umber . Я хочу разбить это число на 5 целых чисел, используя что-то вроде этого:foo <- function(x, n) rep(x/n, n) foo(10, 5) [1] 2 2 2 2 2

x

Это работает до тех пор, пока nэто не будет mutliple of n:

foo(10, 3)
[1] 3.333333 3.333333 3.333333

В этом случае я хотел бы получить такой вывод.

[1] 3 4 3  # the order doesn't matter. 

Значение [ 1 ] 2 5 3 между каждым целым должно быть минимальным. Поэтому этот результат не допускается:

foo <- function(x, n){ 
     res <- rep(x/n, n)
     res <- floor(res)  # rounding
     Diff <- x-sum(res)  # Difference of the sum to the input 
     gr <- sample(1:n, Diff) # select by chance as many values as `Diff` is
     res[gr] <- res[gr]+1 # plus one
     res   
  }

Пока я использую эту функцию, но не уверен, что это всегда правильно:

floor

r,integer,division,

3

Ответов: 3


1

Ваша функция должна работать, но каждый раз будет давать другой ответ. Кроме того, вы , вероятно , хотите использовать разделение эвклидовского для того, что это то , что Вы пытаетесь mimcik с Diffи Diff. В R вы получаете отношение с %/%остальным и так далее. %% Таким простым решением может быть

foo <- function(x,n)
{
    res=numeric(n)
    a=x%/%n # the quotient
    b=x%%n # the remainder
    res[1:n]=a # fill with the quotient
    if(b>0){
     for(i in 1:b)
        res[n-i+1]=res[n-i+1]+1 # add as many time a one in a cell as needed by the remainder
     }
    return(res)
}

1

Это, я думал, был интригующим вопросом. Я понял, что остаток указывает количество (quotient + 1) номеров, которые у вас есть. Например:

17/7 = 2 + 3 /7 -> Так что вам нужно (7- 3 ) х 2 и 3 х (2 + 1)

19/7 = 2 + 5 /7 -> Так что вам нужно (7- 5 ) х 2 и 5 х (2 + 1)

Превосходное решение:

  foo <- function(x,n){
     a = x%/%n # the quotient
     b = x%%n  # the remainder
     return(c(rep(a,n-b),rep(a+1,b)))
}

1

Это должно работать:

foo <- function(x, n) rep(x%/%n, n) + sample(c(rep(1, x %% n), rep(0, n - x %% n)), n)

foo(10, 5)
[#1] 2 2 2 2 2
foo(10, 3)
#[1] 3 3 4
г, целое число, деление,
Похожие вопросы