A veces quiero hacer una prueba exacta examinando todas las combinaciones posibles de los datos para construir una distribución empírica contra la cual pueda probar mis diferencias observadas entre medias. Para encontrar las posibles combinaciones, normalmente usaría la función combn. La función elegir me puede mostrar cuántas combinaciones posibles hay. Es muy fácil que el número de combinaciones sea tan grande que no sea posible almacenar el resultado de la función combn, por ejemplo, combn (28,14) requiere un vector de 2.1 Gb. Así que intenté escribir un objeto que pasara por la misma lógica que la función combinada para proporcionar los valores de una "pila" imaginaria, uno a la vez. Sin embargo, este método (como lo ejemplifiqué) es fácilmente 50 veces más lento que combinarlo en tamaños de combinación razonables,
¿Existe un mejor algoritmo para hacer este tipo de cosas que el algoritmo utilizado en combn? Específicamente, ¿hay alguna forma de generar y extraer la enésima combinación posible sin calcular todas las combinaciones anteriores?
fuente
Respuestas:
Si desea cambiar la velocidad de procesamiento por la memoria (lo cual creo que hace), le sugiero el siguiente algoritmo:
Esto le dará todas las combinaciones posibles de N Elija K sin tener que crearlas explícitamente. Tengo un código para hacer esto en R si lo desea (puede enviarme un correo electrónico a mark dot m period fredrickson at-symbol gmail dot com).
fuente
Generar combinaciones es bastante fácil, vea por ejemplo esto ; escriba este código en R y luego procese cada combinación a la vez que aparece.
fuente