sto essenzialmente cercando di risolvere questo problema: http://rosalind.info/problems/revc/Come sostituire diversi caratteri di una stringa con Julia
voglio sostituire tutte le occorrenze di A, C, G, T con i loro complimenti T, G, C , A .. in altre parole, tutte le A saranno sostituite con T, tutte le C con G ed ecc.
Avevo già utilizzato la funzione replace()
per sostituire tutte le occorrenze di "T" con "U" e speravo che sostituire la funzione richiederebbe un elenco di caratteri da sostituire con un altro elenco di caratteri, ma non sono stato in grado di farlo funzionare, quindi potrebbe non avere quella funzionalità.
So che potrei risolvere questo facilmente utilizzando il pacchetto BioJulia e lo hanno fatto usando la seguente:
# creating complementary strand of DNA
# reverse the string
# find the complementary nucleotide
using Bio.Seq
s = dna"AAAACCCGGT"
t = reverse(complement(s))
println("$t")
ma mi piacerebbe non dover fare affidamento sulla confezione.
Ecco il codice che ho finora, se qualcuno potesse guidarmi nella giusta direzione sarebbe fantastico.
# creating complementary strand of DNA
# reverse the string
# find the complementary nucleotide
s = open("nt.txt") # open file containing sequence
t = reverse(s) # reverse the sequence
final = replace(t, r'[ACGT]', '[TGCA]') # this is probably incorrect
# replace characters ACGT with TGCA
println("$final")
Questo funziona perfettamente quando fornisco str = "AAACCCGGT", ma se provo ad aprire un file e ottenere la stringa in questo modo, ottengo un errore 'non trovato in getindex a dettare'. Inoltre, potresti approfondire un po 'come la funzione in basso risolve il mio problema? In che modo l'indicizzazione del dizionario altera la mia stringa? Attualmente sto leggendo Mastering Julia, ma sono solo alcuni capitoli e ho appena preso Julia ieri, quindi mentre capisco un po ', sono ancora abbastanza estraneo ad alcuni dei meccanici, essendo questo uno. – System
Registra l'errore, è possibile che tu stia leggendo nella nuova riga dal file. Questi non sono mappati dal dizionario, quindi l'errore si presenta. Potresti provare 'map (translate, readchomp (s))'. –
'map (translate, str)' restituirà una nuova stringa tradotta basata su str, allo stesso modo 'replace (str, match, replacement)' restituirà anche una nuova stringa, cioè: 'x =" test "; y = replace (x, 'e', 'E'); x, y' restituisce '(" test "," tEst ")'. ** ** non aggiorneranno la stringa originale sul posto! – SalchiPapa