gpt4 book ai didi

r - R : error when trying to write an equivalent function n choose k

转载 作者:行者123 更新时间:2023-12-03 08:06:36 24 4
gpt4 key购买 nike

我正在学习R编程入门类(class)。

我们被要求编写一个与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 select k”中的许多乘法都可以抵消,因此您需要避免使用常规阶乘,而只将不能抵消的数字相乘( ?prod可能对您有用)。或者(可能更好)使用日志版本 lfactorial避免遇到计算机无法存储的数字。

编辑:从@MrFlick的注释中添加了 lfactorial建议

关于r - R : error when trying to write an equivalent function n choose k,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53308960/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com