我基本上是在尝试解决这个问题:http://rosalind.info/problems/revc/
我想用他们的恭维T,G,C,A代替所有出现的A,C,G,T ..换句话说,所有的A将被T替换,所有的C都被G替换等。
我之前使用replace()
函数将所有出现的'T'替换为'U',并且希望替换函数将一个字符列表替换为另一个字符列表但我没有'能够使它工作,所以它可能没有那个功能。
我知道我可以使用BioJulia软件包轻松解决这个问题,并使用以下方法解决了这个问题:
# creating complementary strand of DNA
# reverse the string
# find the complementary nucleotide
using Bio.Seq
s = dna"AAAACCCGGT"
t = reverse(complement(s))
println("$t")
但我不想依赖包裹。
这是我到目前为止的代码,如果有人可以引导我朝着正确的方向发展,那将是伟大的。
# 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")
答案 0 :(得分:5)
似乎replace
还没有像Bash中的tr
那样进行翻译。所以相反,这里有几种使用字典映射的方法(BioJulia包也似乎也使用了字典):
compliments = Dict('A' => 'T', 'C' => 'G', 'G' => 'C', 'T' => 'A')
然后,如果str = "AAAACCCGGT"
,您可以像这样使用join
:
julia> join([compliments[c] for c in str])
"TTTTGGGCCA"
另一种方法可能是使用函数和map
:
function translate(c)
compliments[c]
end
然后:
julia> map(translate, str)
"TTTTGGGCCA"
字符串是Julia中的可迭代对象;这些方法中的每一个依次读取一个字符c
,并将其传递给字典以获取补充字符。 new 字符串是从这些免费字符构建的。
Julia的字符串也是不可变的:你不能在原地交换字符,而是需要构建一个新的字符串。