2017-02-02 3 views
3

숫자가 있습니다 (예 :). 나는이 같은 것을 사용하여 5 개 정수에이 번호를 분할 할 :정수로 된 숫자를 app으로 나누는 함수. 같은 크기

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

이 경우 내가 같은 출력을 좋아 woud : xn의 mutliple이 아닌 때까지

foo <- function(x, n) rep(x/n, n) 
foo(10, 5) 
[1] 2 2 2 2 2 

이 작동합니다.

[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 
    } 

답변

1
당신의 기능이 작동한다

하지만 다른 대답 모든을 줄 것이다 시각. 또한 아마도 유클리드 분열을 사용하고 싶을 것입니다. 이것은 floorDiff으로 mimcik하려고하는 것입니다. 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) 
} 
+0

덕분에, A는'조건 –

+0

if' 유클리드 부문이 좋은 지점입니다 추가했다. 감사. 나는 의도적으로 을 "by-cance-approach"로 선택했다. – Jimbou

1

나는 흥미로운 문제라고 생각이 될 수 %/%와 함께 몫과 %% 와 나머지를 얻을. 나는 나머지가 당신이 가지고있는 (지수 + 1) 숫자의 수를 나타낸다는 것을 알아 냈습니다. > 당신이 필요 그래서 (7- 3) × 2, 3 × (2 + 1)

7분의 19 -

7분의 17 = 2 + 3/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

이 작동합니다 : 그것은 좋은 지적입니다 chinsoon12 @

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