如何使用朱莉娅
问题描述:
我基本上是试图解决这个问题,以替换字符串中的几个字符:http://rosalind.info/problems/revc/如何使用朱莉娅
我想替换A,C,G,T所有出现的他们的赞美T,G,C ,A ..换句话说,所有的A将被替换为T,所有的C都带有G's等。
我以前用replace()
函数用'U'替换所有出现的'T',并且希望替换函数会将字符列表替换为另一个字符列表,但我无法使其工作,因此它可能不具备该功能。
我知道我可以很容易地解决这个使用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")
答
似乎replace
目前还不做翻译很喜欢,比方说,在猛砸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
,并将其传递给字典以获取免费角色。 A 新字符串是由这些免费字符构建的。
Julia的字符串也是不可变的:你不能在适当的位置交换字符,而是需要建立一个新的字符串。
当我提供str =“AAACCCGGT”时,此功能完美无缺,但如果我尝试打开文件并以这种方式获取字符串,我会在'dict'中找到getindex中未找到的错误。 另外,你能否详细介绍底部的功能如何解决我的问题?索引字典如何改变我的字符串?我现在正在读Mastering Julia,但只有几章,并且昨天刚刚拿起了Julia,所以虽然我明白了一点,但我仍然对一些机制很陌生,这是一个。 – System
Regaridng错误,这可能是你从文件中读取换行符。这些不是由字典映射,所以出现错误。你可以尝试'map(translate,readchomp(s))'。 –
'map(translate,str)'将基于str返回一个新的翻译后的字符串,同样'replace(str,match,replacement)'也会返回一个新的字符串,即:'x =“test”; y = replace(x,'e','E'); x,y'返回'(“test”,“tEst”)'。他们将**不**更新你原来的字符串! – SalchiPapa