2010-05-20 109 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

相關問題