studio - superponer graficas en r
Función que divide un número en n entero con la aplicación. mismo tamaño (3)
Esto debería funcionar:
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
Tengo un número, por ejemplo 10
. Quiero dividir este número en 5 enteros utilizando algo como esto:
foo <- function(x, n) rep(x/n, n)
foo(10, 5)
[1] 2 2 2 2 2
Esto funciona hasta que x
no sea un múltiplo de n
:
foo(10, 3)
[1] 3.333333 3.333333 3.333333
En este caso, me gustaría una salida como.
[1] 3 4 3 # the order doesn''t matter.
La diferencia entre cada entero debe ser mínima. Entonces este resultado no está permitido:
[1] 2 5 3
Hasta ahora estoy usando esta función, pero no estoy seguro si esto siempre es correcto:
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
}
Esto pensé que era una pregunta intrigante. Descubrí que el resto indica la cantidad de números (cociente + 1) que tiene. Por ejemplo:
17/7 = 2 + 3/7 -> Entonces necesitas (7- 3 ) x 2 y 3 x (2 + 1)
19/7 = 2 + 5/7 -> Entonces necesitas (7- 5 ) x 2 y 5 x (2 + 1)
Llevando a una solución más elegante:
foo <- function(x,n){
a = x%/%n # the quotient
b = x%%n # the remainder
return(c(rep(a,n-b),rep(a+1,b)))
}
Su función debería funcionar, pero dará una respuesta diferente cada vez. También es probable que desee utilizar la división euclidiana para eso, que es lo que intenta mimcik con floor
y Diff
. En R obtienes el cociente con %/%
y el resto con %%
Así que una solución simple podría ser
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)
}