r - 如何在 R 中创建我自己的二项式系数函数
问题描述
我创建了一个阶乘函数,然后用于创建二项式系数的函数。我的阶乘函数有效,但二项式函数无效。
我需要创建一个阶乘函数,然后将其用于使用 R 创建一个二项式系数函数。我不允许使用基本程序的函数,例如阶乘,也不允许选择。我不得不使用 for 语句、逻辑等,即使它效率低下。
我必须打印零和十的阶乘,然后是 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)
对于阶乘函数,我得到了正确答案
但是对于二项式函数,我很遥远。
如果有人能告诉我我在哪里犯了错误,我将不胜感激。
解决方案
这里有很多问题,都与基本的 R 编码和一般的编码有关。让我们逐步了解其中的一些:
您的函数
fact
实际上不返回任何内容。目前它所做的只是print
控制台的值。如果你看一下help("print")
它说'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 函数以允许任何实数(甚至复数)。不管怎样,我会把这个留给你。同样,您的函数
bc
也不返回任何内容,而是将值写入y
控制台。此外,您需要注意括号以确保术语(n - k)!
和k!
在分母中。这两个问题都可以通过写作解决bc <- function(n,k) return(fact(n)/(fact(n - k) * fact(k)))
为了确认,我们计算 5 选择 2 的系数:
bc(5, 2) #10
推荐阅读
- sqlite - FutureBuilder 在不触摸屏幕的情况下无法工作
- c++ - 基于 for 循环的无辜范围不起作用
- android - android推送的FCM消息中的`ttl`和`time_to_live`属性有什么区别?
- python - 根据给定的汉明距离折叠字符串集
- django - 提交表单并从输入字段中检索值后重定向到另一个页面
- c++ - 用于 localhost:Port 的 MSVC++ 中的 TLS 客户端
- powershell - 如何将其值中包含连字符的$变量作为参数传递给另一个函数
- javascript - 如何通过将鼠标悬停在 sigmaJs 中的当前节点上仅对当前节点和连接节点绘制标签为真?
- razor - DB2 razor 中的列或参数定义无效
- javascript - triggerHandler 'rightnow' 没有在页面刷新时更新