2016-03-03 104 views
6

我基本上是試圖解決這個問題,以替換字符串中的幾個字符: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") 

回答

5

似乎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的字符串也是不可變的:你不能在適當的位置交換字符,而是需要建立一個新的字符串。

+0

當我提供str =「AAACCCGGT」時,此功能完美無缺,但如果我嘗試打開文件並以這種方式獲取字符串,我會在'dict'中找到getindex中未找到的錯誤。 另外,你能否詳細介紹底部的功能如何解決我的問題?索引字典如何改變我的字符串?我現在正在讀Mastering Julia,但只有幾章,並且昨天剛剛拿起了Julia,所以雖然我明白了一點,但我仍然對一些機制很陌生,這是一個。 – System

+1

Regaridng錯誤,這可能是你從文件中讀取換行符。這些不是由字典映射,所以出現錯誤。你可以嘗試'map(translate,readchomp(s))'。 –

+1

'map(translate,str)'將基於str返回一個新的翻譯後的字符串,同樣'replace(str,match,replacement)'也會返回一個新的字符串,即:'x =「test」; y = replace(x,'e','E'); x,y'返回'(「test」,「tEst」)'。他們將**不**更新你原來的字符串! – SalchiPapa