GOOGLE ADS

lunes, 25 de abril de 2022

Cómo crear mi propia función de coeficiente binomial en R

Creé una función factorial que luego se usa para crear una función para el coeficiente binomial. Mi función factorial funciona pero la función binomial no.

Necesitaba crear una función factorial que luego se usaría para crear una función de coeficiente binomial usando R. No se me permitía usar las funciones del programa base, como factorial ni elegir. Tuve que usar para declaraciones, lógicas, etc. aunque es ineficiente.

Tuve que imprimir el factorial de cero y diez, luego el coeficiente binomial con n = 5 y k = 2

fact <- function(n) {
x <- 1
if(n == 0) {
print(1)
} else {
for(i in 1:n) {
x <- x*i
}
}
print(x)
}
fact(0)
fact(10)
bc <- function(n, k) {
y <- fact(n) / fact(n - k) * fact(k)
print(y)
}
bc(5, 2)

Para la función factorial obtuve la respuesta correcta

Pero para la función binomial estaba muy lejos.

Si alguien me puede mostrar donde he cometido el error se lo agradecería mucho.


Solución del problema

Aquí hay bastantes problemas, tanto relacionados con la codificación básica de R como con la codificación en general. Repasemos algunos de ellos paso a paso:

  • Su función facten realidad no devuelve nada. Todo lo que hace en este momento son printvalores para la consola. Si le echas un vistazo help("print")se dice que

    'print' imprime su argumento y lo devuelve de forma invisible (a través de 'invisible(x)').

    Entonces, para factdevolver un valor, podemos hacer

    fact <- function(n) {
    x <- 1
    if (n > 0) {
    for (i in 1:n) x <- x * i
    }
    return(x)
    }

    He ordenado su código eliminando el n == 0cheque innecesario.

    Tenga en cuenta que todavía hay margen de mejora. Por ejemplo, hay mejores formas de calcular el factorial de un número. En segundo lugar, su función actualmente no trata adecuadamente con números negativos. Generalmente, el factorial solo se define para números enteros no negativos. Por lo tanto, puede cambiar factpara devolver NAnúmeros negativos o, quizás más interesante, generalizar la función factorial a la función Gamma para permitir cualquier número real (o incluso complejo). De cualquier manera, te dejaré esto a ti.


  • Del mismo modo, su función bctampoco devuelve nada y, en cambio, escribe el valor de yen la consola. Además, debe tener cuidado con los paréntesis para asegurarse de que los términos (n - k)!y k!estén en el denominador. Ambos problemas se pueden solucionar escribiendo

    bc <- function(n,k) return(fact(n)/(fact(n - k) * fact(k)))

  • Para confirmar, calculamos el coeficiente para 5 elige 2:

    bc(5, 2)
    #10
  • No hay comentarios:

    Publicar un comentario

    Regla de Firestore para acceder a la generación de subcolección Permisos faltantes o insuficientes

    Tengo problemas con las reglas de Firestore para permitir el acceso a algunos recursos en una subcolección. Tengo algunos requests document...