我试图根据Julia中的文本文件内容创建一个库,用于生物信息学问题。该文件的格式如下:
UUU F CUU L AUU I GUU V
UUC F CUC L AUC I GUC V
...
我想制作一个字典,其中键是3个字母的部分(密码子),条目是单个字母部分(氨基酸)。我能用grep:
取出正确的组件for m in eachmatch(r"([AUGC]{3,3})\s([A-Z])", file)
codon, aa = m.captures
如果我在这个循环中打印codon
和aa
,我会得到正确的输出(所有的密码子,所有的aa')但我可以'弄清楚如何把它放入字典。如果我在循环结束时执行:codons = {codon => aa}
,我最终会得到一个只包含最后一个条目的字典。
我确信语法是非常明显的,但我是一名生物学家,而不是程序员,所以我对the documentation的阅读并不能让我随处可见。它说:
给定字典D,语法D [x]返回键x的值(如果存在)或抛出错误,并且D [x] = y存储键值对x =>在D中(替换键x的任何现有值)。
但是我在循环结束时尝试了codons[codon] = aa
(我在循环之前用codons = {}
启动了字典),但是我得到了错误:
no method setindex!(Array{Any,1},SubString{UTF8String},SubString{UTF8String})
at In[35]:5
in anonymous at no file:4
非常感谢任何帮助。
编辑:显然,我没有正确启动字典。如果我在开始时codons = {"blah" => "blahblah"}
,循环工作并正确填写。所以一个修改过的问题:你如何启动空库?
EDIT2:最小的不工作示例:
file = open(readall, "rna_codons.txt")
codons = {}
for m in eachmatch(r"([AUGC]{3,3})\s([A-Z])", file)
codon, aa = m.capture
codons[codon] = aa
end
答案 0 :(得分:2)
总结最小工作示例(MWE),以便将您的格式化文本文件读入Julia Dict ...
file = open(readall, "rna_codons.txt")
codons = Dict()
for m in eachmatch(r"([AUGC]{3,3})\s([A-Z])", file)
codon, aa = m.capture
codons[codon] = aa
end
N.B。:如果文件非常大,可能会有更快的方式来生成Dict
。
<强> 修改 强>
鉴于您明显的文本文件格式,这是创建Dict
的另一种方法。我没有做任何测试来确定任何性能损失/收益。
condon_array = open(readdlm, "rna_codons.txt")
condons = Dict{ASCIIString,ASCIIString}(condon_array[:,1:2:end][:],condon_array[:,2:2:end][:])
N.B。:如果您使用它,请更好地检查它是否正确。