タンパク質(26文字のアルファベットA-Z のアミノ酸の短い配列)をタンパク質(同じアルファベットの長い配列)に効率的にマップしようとしています。これを行う最も効率的な方法は、Aho-Corasick
トライ(ペプチドがキーワードである)です。残念ながら、私は非ヌクレオチドアルファベット(Biostrings 'PDict
とStarrのmatch_ac
はどちらもDNAのためにハードコードされています)で動作するRのバージョンのACを見つけることはできません。複数の文字列/キーワードを複数のテキストに効率的に一致させるR
私は基本的なgrepアプローチを並列化しようとしてきました。しかし、大きなIOオーバーヘッドを発生させることなくこれを行う方法を考え出すのは問題があります。ここでは簡単な例です:
peptides = c("FSSSGGGGGGGR","GAHLQGGAK","GGSGGSYGGGGSGGGYGGGSGSR","IISNASCTTNCLAPLAK")
if (!exists("proteins"))
{
biocLite("biomaRt", ask=F, suppressUpdates=T, suppressAutoUpdate=T)
library(biomaRt)
ensembl = useMart("ensembl",dataset="hsapiens_gene_ensembl")
proteins = getBM(attributes=c('peptide', 'refseq_peptide'), filters='refseq_peptide', values=c("NP_000217", "NP_001276675"), mart=ensembl)
row.names(proteins) = proteins$refseq_peptide
}
library(snowfall)
library(Biostrings)
library(plyr)
sfInit(parallel=T, cpus=detectCores()-1)
allPeptideInstances = NULL
i=1
increment=100
count=nrow(proteins)
while(T)
{
print(paste(i, min(count, i+increment), sep=":"))
text_source = proteins[i:min(count, i+increment),]
text = text_source$peptide
#peptideInstances = sapply(peptides, regexpr, text, fixed=T, useBytes=T)
peptideInstances = sfSapply(peptides, regexpr, text, fixed=T, useBytes=T)
dimnames(peptideInstances) = list(text_source$refseq_peptide, colnames(peptideInstances))
sparsePeptideInstances = alply(peptideInstances, 2, .fun = function(x) {x[x > 0]}, .dims = T)
allPeptideInstances = c(allPeptideInstances, sparsePeptideInstances, recursive=T)
if (i==count | nrow(text_source) < increment)
break
i = i+increment
}
sfStop()
いくつかの問題がここにあります
peptideInstances
ここでは密行列であるので、各ワーカーから返す は非常に冗長です。私はブロックを に壊して、私が40,000(タンパク質)×60,000 (ペプチド)マトリックスを扱っていないようにしました。- ペプチドをパラレル化すると、タンパク質がより大きくなるので、タンパク質に対して並列化する方がより意味があります。 しかし、私はタンパク質によってそれをやろうとしたことに不満を持っていました。
- このコードは、text_sourceにたった1つのタンパク質がある場合には壊れます。
また、誰かがRの方が優れていることに気付いていれば、それを使用してもよろしいですか?私はこれで十分な時間を過ごしました。おそらく、Aho-Corasickの実装に役立ったでしょう。
これらの中にはあいまいコードがありますが、簡単にするために無視してください。
ニース:
は、ここではいくつかの使用例です!おそらくあなたはあなたのパッケージを使って例(または2つ)を追加することができます – Jota