如何在R中创建自己的二项式系数函数

时间:2019-01-27 02:17:49

标签: r

我创建了阶乘函数,然后将其用于创建二项式系数的函数。我的阶乘函数有效,但是二项式函数无效。

我需要创建一个阶乘函数,然后将其用于使用R创建二项式系数函数。 我不允许使用基本程序的功能,例如阶乘或选择。 即使效率低下,我也不得不使用它来声明,逻辑等。

我必须打印零和十的阶乘,然后打印n = 5和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)

对于阶乘函数,我得到了正确的答案

但是对于二项式函数,我却遥遥无期。

如果有人可以告诉我我在哪里犯了错误,那我将非常感激。

1 个答案:

答案 0 :(得分:1)

这里有很多问题,涉及基本R编码和一般编码。让我们逐步了解其中一些:

  1. 您的函数fact实际上不返回任何内容。目前,它所做的只是向控制台提供print个值。如果您查看help("print"),就会发现

      

    “打印”打印其参数,并不可见地(通过“ invisible(x)”)将其返回。

    因此,为了使fact实际返回一个值,我们可以做

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

    我已通过删除不必要的n == 0检查来整理您的代码。

    请注意,仍有改进的空间。例如,有更好的方法来计算数字的阶乘。其次,您的函数当前无法正确处理负数。通常,阶乘仅针对非负整数定义。因此,您可以将fact更改为负数返回NA,或者-也许更有趣的是-将阶乘函数泛化为Gamma函数以允许任何实数(甚至复数)。无论哪种方式,我都会把它留给你。

  2. 类似地,您的函数bc也不会返回任何内容,而是将y的值写入控制台。此外,您需要注意方括号,以确保术语(n - k)!k!在分母中。这两个问题都可以通过书面方式解决

    bc <- function(n,k) return(fact(n)/(fact(n - k) * fact(k)))
    
  3. 要确认,我们计算5的系数,选择2:

    bc(5, 2)
    #10