Às vezes, quero fazer um teste exato examinando todas as combinações possíveis dos dados para criar uma distribuição empírica com a qual posso testar minhas diferenças observadas entre as médias. Para encontrar as combinações possíveis, eu normalmente usaria a função combn. A função escolher pode me mostrar quantas combinações possíveis existem. É muito fácil que o número de combinações seja tão grande que não seja possível armazenar o resultado da função combn, por exemplo, combn (28,14) requer um vetor de 2,1 Gb. Por isso, tentei escrever um objeto que seguisse a mesma lógica da função combn para fornecer os valores de uma "pilha" imaginária, uma de cada vez. No entanto, esse método (como eu instanciei) é facilmente 50 vezes mais lento que o combn em tamanhos razoáveis de combinação,
Existe um algoritmo melhor para fazer esse tipo de coisa do que o algoritmo usado no combn? Especificamente, existe uma maneira de gerar e puxar a enésima combinação possível sem calcular todas as combinações anteriores?
fonte
Respostas:
Se você deseja trocar a velocidade de processamento pela memória (o que eu acho que você faz), sugiro o seguinte algoritmo:
Isso fornecerá a você todas as combinações possíveis de N Choose K sem precisar criá-las explicitamente. Eu tenho código para fazer isso em R, se você quiser (você pode me enviar um e-mail no ponto de ponto m fredrickson no símbolo gmail dot com).
fonte
Gerar combinações é bem fácil, veja, por exemplo, isso ; escreva esse código em R e processe cada combinação no momento em que aparecer.
fonte