Comment générer toutes les chaînes possibles à partir de caractères variables à des emplacements donnés dans R?


Powege

Étant donné un vecteur ordonné de chaînes où chaque chaîne montre les caractères possibles à cette position, comment puis-je obtenir toutes les combinaisons possibles de chaînes?

Par exemple, étant donné le vecteur:

vec <- c("A", "A", "T", "C", "AG", "ACG", "T", "A", "A")

Les combinaisons de chaînes possibles, les positions données 5 peuvent être "A" ou "G", et 6 peuvent être "A", "C" ou "G" sont:

strings <- c("AATCAATAA"
             "AATCACTAA"
             "AATCAGTAA"
             "AATCGATAA"
             "AATCGCTAA"
             "AATCGGTAA")
Joe Roe

Divisez votre vecteur en caractères individuels, puis utilisez expand.grid():

vec <- c("A", "A", "T", "C", "AG", "ACG", "T", "A", "A")

strings <- expand.grid(strsplit(vec, ""), stringsAsFactors = FALSE)
strings
#>   Var1 Var2 Var3 Var4 Var5 Var6 Var7 Var8 Var9
#> 1    A    A    T    C    A    A    T    A    A
#> 2    A    A    T    C    G    A    T    A    A
#> 3    A    A    T    C    A    C    T    A    A
#> 4    A    A    T    C    G    C    T    A    A
#> 5    A    A    T    C    A    G    T    A    A
#> 6    A    A    T    C    G    G    T    A    A

Cela nous donne un bloc de données, mais nous pouvons coller les lignes ensemble pour obtenir un seul vecteur:

apply(strings, 1, paste0, collapse = "")
#> [1] "AATCAATAA" "AATCGATAA" "AATCACTAA" "AATCGCTAA" "AATCAGTAA" "AATCGGTAA"

Articles connexes