2010-05-20 67 views
7

..或做我必须给是否有一个R函数来获取n个对象的排列数k p(n,k)?

P.nk <- factorial(n)/factorial(n-k) 

P.nk <- choose(n,k) * factorial(k) 

谢谢。

+1

正如其他人所说,存在gregmisc直线排列功能(在新的解析gregmisc包gtools) 。但是,我发现的那个和所有其他包函数实际上是用于生成排列,而不仅仅是给出排列的总数。因此,他们往往是缓慢的。 我以前曾基准过这样的功能。这里的选项2是最快的,比我发现的任何包函数快得多。与第一个选项相比,它的计算上限也更高。 – John 2010-05-20 15:20:27

+0

感谢您的有用信息 – Brani 2010-05-21 06:39:36

回答

8

我不知道任何现有的功能。你的第一个建议会失败,大n。当作为一个函数写你的第二个想法应该工作正常:

perm <- function(n,k){choose(n,k) * factorial(k)} 

然后perm(500,2)会给249500为例。

+0

第一个建议可以改写为exp(lfactorial(n) - lfactorial(n-k))'。但我也会用。 – Marek 2010-05-20 10:31:27

3

我认为gregmisc包提供了这些功能。

library(gregmisc) 
permutations(n=4,r=4) 

邮件列表参考:[R] permutation

+1

实际上,所要求的将是:dim(permutations(n,k))[1] – 2010-05-20 09:18:15

1

在“概率”包退房nsamp(n,k,ordered=T)

+0

'nsamp(500,2,ordered = TRUE)'在Rob回答中遇到问题状态('value out of range') 。 – Marek 2010-05-20 10:28:01

相关问题