Parfois, je veux faire un test exact en examinant toutes les combinaisons possibles des données pour construire une distribution empirique par rapport à laquelle je peux tester mes différences observées entre les moyennes. Pour trouver les combinaisons possibles, j'utilise généralement la fonction combn. La fonction Choose peut me montrer le nombre de combinaisons possibles. Il est très facile que le nombre de combinaisons devienne si grand qu'il n'est pas possible de stocker le résultat de la fonction combn, par exemple, combn (28,14) nécessite un vecteur de 2,1 Go. J'ai donc essayé d'écrire un objet qui passait par la même logique que la fonction combn afin de fournir les valeurs d'une "pile" imaginaire une à la fois. Cependant, cette méthode (comme je l'ai instanciée) est facilement 50 fois plus lente que combn à des tailles de combinaison raisonnables,
Existe-t-il un meilleur algorithme pour faire ce genre de chose que l'algorithme utilisé dans combn? Plus précisément, existe-t-il un moyen de générer et de tirer la Nème combinaison possible sans calculer par toutes les combinaisons précédentes?
la source
Réponses:
Si vous souhaitez échanger la vitesse de traitement contre de la mémoire (ce que je pense que vous faites), je suggère l'algorithme suivant:
Cela vous donnera toutes les combinaisons N Choose K possibles sans avoir à les créer explicitement. J'ai du code pour le faire en R si vous le souhaitez (vous pouvez m'envoyer un mail à mark dot m period fredrickson at-symbol gmail dot com).
la source
La génération de combinaisons est assez simple, voyez par exemple ceci ; écrire ce code dans R, puis traiter chaque combinaison à un moment où elle apparaît.
la source