2010-05-20 2 views
7

..ou dois-je donnerExiste-t-il une fonction R pour obtenir le nombre de permutations de n objets prenant k P (n, k)?

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

ou

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

Merci.

+1

Comme d'autres l'ont dit, il y a une fonction de permutations directement dans gregmisc (gtools dans les nouveaux forfaits gregmisc analysable) . Mais, cela et toutes les autres fonctions de paquet que j'ai trouvées sont vraiment pour générer des permutations, pas seulement pour donner le nombre total de permutations. Par conséquent, ils ont tendance à être lent. J'ai déjà comparé ces fonctions auparavant. Votre option 2 ici est de loin la plus rapide, beaucoup plus rapide que toutes les fonctions de paquet que j'ai trouvées. Il a également une limite supérieure plus élevée pour les calculs que votre première option. – John

+0

Merci pour les informations utiles – Brani

Répondre

8

Je ne connais aucune fonction existante. Votre première suggestion échouera avec un grand n. Votre deuxième idée devrait fonctionner correctement lorsqu'il est écrit en fonction:

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

Alors perm(500,2) donnera 249500 par exemple.

+0

La première suggestion pourrait être réécrire comme 'exp (lfactorial (n) - lfactorial (n-k))'. Mais je vais utiliser le second aussi. – Marek

3

Je pense que le package gregmisc fournit ces fonctions.

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

référence Liste de diffusion: [R] permutation

+1

En fait, ce qui est demandé serait donné par: dim (permutations (n, k)) [1] –

1

Découvrez nsamp(n,k,ordered=T) dans le package 'prob'

+0

'nsamp (500,2, ordonné = TRUE)' rencontrer l'état de problème dans Rob réponse ('valeur hors de portée') . – Marek

Questions connexes