2010-05-20 9 views
7

..o devo dareEsiste una funzione R per ottenere il numero di permutazioni di n oggetti con k P (n, k)?

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

o

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

Grazie.

+1

Come altri hanno già detto, c'è una funzione di permutazioni dritto gregmisc (gtools nei nuovi pacchetti gregmisc parsed) . Ma, quella e tutte le altre funzioni del pacchetto che ho trovato sono in realtà per generare permutazioni, non solo per dare il numero totale di permutazioni. Pertanto, tendono ad essere lenti. Ho già eseguito il benchmark su tali funzioni. La tua opzione 2 qui è di gran lunga la più veloce, molto più veloce di qualsiasi altra funzione del pacchetto che ho trovato. Ha anche un limite superiore superiore per i calcoli rispetto alla prima opzione. – John

+0

Grazie per le informazioni utili – Brani

risposta

8

Non conosco alcuna funzione esistente. Il tuo primo suggerimento fallirà con il grande n. La tua seconda idea dovrebbe funzionare bene quando scritto come una funzione:

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

Poi perm(500,2) darà 249500, per esempio.

+0

Il primo suggerimento potrebbe essere riscritto come 'exp (lfactorial (n) - lfactorial (n-k))'. Ma userò anche il secondo. – Marek

3

Penso che il pacchetto gregmisc fornisca queste funzioni.

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

Mailing list di riferimento: [R] permutation

+1

In realtà, ciò che viene chiesto sarebbe dato da: dim (permutazioni (n, k)) [1] –

1

Partenza nsamp(n,k,ordered=T) nel pacchetto 'prob'

+0

'nsamp (500,2, ordinato = TRUE)' stato di errore incontro in risposta Rob ('valore fuori intervallo') . – Marek

Problemi correlati