0
votes

Comment générer toutes les permutations de chaîne avec des ensembles de lettres donnés à chaque position dans R

Je suis sûr que cela a été demandé et résolu auparavant, mais je cherche probablement les mauvais termes. Je ne trouve pas le fil pertinent.

dans r , Je voudrais générer tous les mots / chaînes possibles, où chaque position peut prendre uniquement un ensemble de valeurs , comme

  • pos1 peut être abc
  • pos2 peut être abcd
  • POS3 peut être ABC
  • POS4 peut être BCD

    etc. EG.: Babc est une solution mais d AB c n'est pas.

    Si vous pouvez me diriger vers une solution, j'apprécierais vraiment!

    Merci pour votre temps!

    ... TIMB !, TIMC !, TIMD! ...

    thx, Bourgeon


2 commentaires

Vous avez dit que Baba peut être une solution, mais il n'y a pas de disponible en position 4. Est-ce une faute de frappe ou je suis mal compris?


Haha, vrai que, bien repéré :-d merci pour votre solution, vérifiez-le maintenant!


3 Réponses :


1
votes

Une solution de base rapide et sale ... xxx

créé sur 2020-06-18 par le package Reprex (v0.3.0)


0 commentaires

1
votes

dans la base r Nous pouvons faire ce qui suit

pos1 <- c('A','B','C')
pos2 <- c('A','B','C','D')
pos4 <- c('B','C','D')

AllPos <- list(pos1,pos2,pos3,pos4)

result <- AllPos[1]

for(i in AllPos[-1] ){
    result <-  apply(merge(result ,i),1,paste0,collapse="")
}

> result 
  [1] "AAAB" "BAAB" "CAAB" "ABAB" "BBAB" "CBAB" "ACAB" "BCAB" "CCAB" "ADAB"
 [11] "BDAB" "CDAB" "AABB" "BABB" "CABB" "ABBB" "BBBB" "CBBB" "ACBB" "BCBB"
 [21] "CCBB" "ADBB" "BDBB" "CDBB" "AACB" "BACB" "CACB" "ABCB" "BBCB" "CBCB"
 [31] "ACCB" "BCCB" "CCCB" "ADCB" "BDCB" "CDCB" "AAAC" "BAAC" "CAAC" "ABAC"
 [41] "BBAC" "CBAC" "ACAC" "BCAC" "CCAC" "ADAC" "BDAC" "CDAC" "AABC" "BABC"
 [51] "CABC" "ABBC" "BBBC" "CBBC" "ACBC" "BCBC" "CCBC" "ADBC" "BDBC" "CDBC"
 [61] "AACC" "BACC" "CACC" "ABCC" "BBCC" "CBCC" "ACCC" "BCCC" "CCCC" "ADCC"
 [71] "BDCC" "CDCC" "AAAD" "BAAD" "CAAD" "ABAD" "BBAD" "CBAD" "ACAD" "BCAD"
 [81] "CCAD" "ADAD" "BDAD" "CDAD" "AABD" "BABD" "CABD" "ABBD" "BBBD" "CBBD"
 [91] "ACBD" "BCBD" "CCBD" "ADBD" "BDBD" "CDBD" "AACD" "BACD" "CACD" "ABCD"
[101] "BBCD" "CBCD" "ACCD" "BCCD" "CCCD" "ADCD" "BDCD" "CDCD"


1 commentaires

J'accepte cela, car c'est la solution la plus évolutive pour les longues chaînes! exiger (stringr); allpos <- acaply (Allpos, str_split_fixed, motif = "", n = inf); Allpos <- Allpos, comme. caractère) faciliterait la tâche si vous commencez à partir de mots, au lieu de vecteurs de lettres



1
votes

expand.grid est votre ami ici.

une solution simple: xxx

créé sur 2020-06-18 par le package Reprex (v0.3.0)


1 commentaires

N'est-ce pas la même chose que la solution que j'ai postée plus tôt?