...或者我必须提供
P.nk <- factorial(n) / factorial(n-k)
或者
P.nk <- choose(n,k) * factorial(k)
谢谢。
...或者我必须提供
P.nk <- factorial(n) / factorial(n-k)
或者
P.nk <- choose(n,k) * factorial(k)
我不知道是否存在现成的函数。你的第一个建议在 n 很大的情况下会失败。当写成函数时,你的第二个想法应该可以正常工作:
perm <- function(n,k){choose(n,k) * factorial(k)}
例如,perm(500,2)
将会得到249500。
exp(lfactorial(n) - lfactorial(n-k))
。但我也会使用第二个建议。 - Mareknsamp(n,k,ordered=T)
。nsamp(500,2,ordered=TRUE)
- Mareknsamp(173,2,ordered=TRUE)----R版本3.5.3 - Nick Dong[1] NaN 警告信息: 1: In factorial(n[i]) : value out of range in 'gammafn' 2: In factorial(n[i] - k[i]) : value out of range in 'gammafn'
nsamp(171,2,ordered=TRUE)[1] Inf 警告信息: In factorial(n[i]) : value out of range in 'gammafn'
nsamp(170,2,ordered=TRUE)[1] 28730
另一种使用基本R的方法是:
permn <- prod( (n-(0:(k-1)))
这是以下公式的简单实现:
$$p(n,k) = \prod_{j=0}^{k-1} n-j$$
包 gtools
# R version 3.5.3
install.packages("gtools")
library(gtools)
base::nrow(gtools::permutations(500,2))
结果:
[1] 249500
还可以参见combinations-and-permutations-in-r,permutation_with_replacement.R
另一个包prob
:
base::ncol(prob::permsn(500,2))
[1] 249500