단백질 (동일한 알파벳의 긴 시퀀스)에 정확한 펩타이드 (26 자리 알파벳의 짧은 문자열 인 A-Z)를 효율적으로 매핑하려고합니다. 이것을 수행하는 가장 효율적인 방법은 Aho-Corasick
trie (펩타이드는 키워드 임)입니다. 불행히도 비 뉴클레오티드 알파벳 (Biostrings 'PDict
및 Starr의 match_ac
은 모두 DNA에 대해 하드 코딩 됨)로 작동하는 R 버전의 AC를 찾을 수 없습니다.여러 문자열/키워드를 여러 텍스트와 효율적으로 일치 R
버팀목으로 나는 기본적인 grep 접근 방식을 병렬화하려고 노력했습니다. 하지만 상당한 IO 오버 헤드를 발생시키지 않으면 서 그렇게 할 수있는 방법을 찾는 데 어려움을 겪고 있습니다. 각 노동자에서 반환하는 것은 매우 자세한 그래서 ,
peptideInstances
여기 밀도 행렬 : 여기에 몇 가지 문제가 있습니다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()
: 여기에 간단한 예입니다. 나는 블록을 으로 나누어서 40,000 (단백질) x 60,000 (펩타이드) 매트릭스를 다루지 않을 것입니다.
- 단백질이 더 커지기 때문에 병렬 처리하는 것이 더 효과적 일 때 펩티드를 병렬 처리합니다. 그러나 나는 단백질에 의해 그것을하려고하는 것에 좌절감을 느꼈다 :
- text_source에 단 하나의 단백질 만 있다면이 코드는 깨진다.
다른 방법으로 R의 더 나은 솔루션을 알고 있다면 기꺼이 사용하겠습니다. 나는 Aho-Corasick을 구현하는 데 더 도움이되었을 것입니다.
일부는 모호성 코드이지만 일부는 무시합니다.
니스 :
는 여기에 몇 가지 사용 예입니다! 패키지를 사용하여 예제 (또는 두 개)를 추가 할 수 있습니다. – Jota