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 fact
en realidad no devuelve nada. Todo lo que hace en este momento son print
valores 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 fact
devolver 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 == 0
cheque 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 fact
para devolver NA
nú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 bc
tampoco devuelve nada y, en cambio, escribe el valor de y
en 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