2010-05-20 26 views
7

..o tengo que dar¿Hay una función R para obtener el número de permutaciones de n objetos tomando k P (n, k)?

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

o

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

Gracias.

+1

Como han dicho otros, hay una función de permutaciones recta en gregmisc (gtools en los nuevos paquetes gregmisc ha analizado) . Pero, esa y todas las demás funciones del paquete que he encontrado son realmente para generar permutaciones, no solo para dar el número total de permutaciones. Por lo tanto, tienden a ser lentos. He comparado previamente tales funciones. Su opción 2 aquí es por lejos la más rápida, mucho más rápida que cualquier otra función de paquete que he encontrado. También tiene un límite superior más alto para los cálculos que su primera opción. – John

+0

Gracias por la información útil – Brani

Respuesta

8

No conozco ninguna función existente. Su primera sugerencia fallará con n grande. Su segunda idea debería funcionar bien cuando se escribe como una función:

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

Entonces perm(500,2) dará 249500 por ejemplo.

+0

La primera sugerencia podría reescribirse como 'exp (lfactorial (n) - lfactorial (n-k))'. Pero usaré el segundo también. – Marek

3

Creo que el paquete gregmisc proporciona estas funciones.

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

Lista de correo de referencia: [R] permutation

+1

En realidad, lo que se pregunta estaría dado por: dim (permutaciones (n, k)) [1] –

1

Salida nsamp(n,k,ordered=T) en el paquete 'prob'

+0

'nsamp (500,2, ordenado = VERDADERO)' encuentra el estado del problema en la respuesta de Rob ('valor fuera de rango ') . – Marek

Cuestiones relacionadas