r - R:尝试编写等效函数时出错 n 选择 k
问题描述
我正在学习 R 编程入门课程。
我们被要求编写一个与 n 选择 k 相同的函数:
choose(n, k)
我们被要求通过运行 n = 200, k = 50 来检查函数是否有效。
我写了以下代码:
select_k <- function(n, k){
sr <- c(log10(log10((factorial(n-1)/factorial(k-1)*factorial(n-k-2)))*(n/k)))
return(sr)
}
因为 select_k 应该是“n 选择 k”。
我的函数适用于以下值:100 选择 25,但不适用于更大的值,如 n = 200,k = = 50。
select_k( n = 200, k = 50)
[1] NaN
Warning message:
In factorial(n) : value out of range in 'gammafn'
我不知道还能做些什么来解决这个问题。
解决方案
这不适用于更大n
,因为factorial(n)
太大:
> factorial(199)
[1] Inf
Warning message:
In factorial(199) : value out of range in 'gammafn'
这应该返回 200,但计算机只看到您正在尝试Inf
除以Inf
:
> factorial(200)/factorial(199)
[1] NaN
Warning messages:
1: In factorial(200) : value out of range in 'gammafn'
2: In factorial(199) : value out of range in 'gammafn'
显然,“n 选择 k”中的很多乘法都被抵消了,所以你需要避免使用常规阶乘,而只乘以不抵消的数字(?prod
可能对你有用)。或者(可能更好)使用日志版本lfactorial
来避免遇到您的计算机无法存储的数字。
编辑:lfactorial
从@MrFlick 的评论中添加了推荐
推荐阅读
- rstudio - 源窗格在 Rstudio 中显示灰色特殊字符
- javascript - Nuxt Algolia InstantSearch:实现客户端动态获取时的服务端渲染
- python - Discord.py Bot - 如何提及随机用户
- javascript - ReactJS:获取后返回警报
- azure-sql-database - 如何指定 .dacpac 应该使用 VS2022 数据库项目中指定的默认 SQLCMD 变量值?
- c++ - 如何使用 Visual Studio 2019 和 c++ 链接 OpenSSL 库?
- android - 我可以在 Google Play 控制台中以与之前上传的名称相同的名称上传应用程序吗?
- matlab - 如何将向量传递给相同大小的函数句柄,以便它自动将第一个输入作为第一个变量等等?MATLAB
- python - 为用 vanilla Python 编写的 API 自动生成 Swagger 文档
- reactjs - 缺少 Django、React 和 Rest Framework JWT 身份验证标头