我試圖掃描可能的SNPs
和indels
通過將支架與參考基因組的子序列進行比對。 (原始讀取不可用)。我正在使用R/bioconductor
和Biostrings軟件包中的`pairwiseAlignment函數。 這是工作的罰款更小的支架,但未能當我試圖與錯誤消息作爲對準支架56kbp:尋找算法做長對核苷酸比對
錯誤QualityScaledXStringSet.pairwiseAlignment(圖案=圖案, :無法分配大小17179869183.7 GB的內存塊
我不知道這是否是一個錯誤或沒有;我的印象是,通過pairwiseAlignment
使用的Needleman-Wunsch algorithm
是O(n*m)
我本以爲這意味着計算需求是3.1E9
操作(56K * 56k ~= 3.1E9)
的順序它本身相似性矩陣也應該佔用3.1G內存的順序。不確定是否我沒有正確記住big-o符號,或者實際上是在給定R scripting
環境的開銷時構建對齊所需的內存開銷。
有沒有人有更好的比對算法用於比對長序列的建議?使用BLAST已經完成了初始比對以找到參比基因組的區域以進行比對。我並不完全有信心BLAST
的正確放置indels的可靠性,我還沒有找到一個好像biostrings提供的解析原始BLAST比對的API。
順便說一句,這裏是一個代碼片段複製問題:
library("Biostrings")
scaffold_set = read.DNAStringSet(scaffold_file_name) #scaffold_set is a DNAStringSet instance
scafseq = scaffold_set[[scaffold_name]] #scaf_seq is a "DNAString" instance
genome = read.DNAStringSet(genome_file_name)[[1]] #genome is a "DNAString" instance
#qstart, qend, substart, subend are all from intial BLAST alignment step
scaf_sub = subseq(scafseq, start=qstart, end=qend) #56170-letter "DNAString" instance
genomic_sub = subseq(genome, start=substart, end=subend) #56168-letter "DNAString" instance
curalign = pairwiseAlignment(pattern = scaf_sub, subject = genomic_sub)
#that last line gives the error:
#Error in .Call2("XStringSet_align_pairwiseAlignment", pattern, subject, :
#cannot allocate memory block of size 17179869182.9 Gb
的錯誤不會用較短的比對(幾百個鹼基)發生。 我還沒有找到錯誤開始發生的長度截止點
看起來像整數溢出的排序;您使用的R的最大向量大小爲2^31-1,即2147483647.'sessionInfo()'的輸出將很有用。從你的問題陳述中還需要在整個序列中進行對齊,還是看看合理大小的(重疊)窗口是否有意義? –
您能否顯示您用於執行對齊的代碼? (如果沒有序列,它將不會被重現,但至少會有幫助) –
64位整數溢出(17179869183.7GiB〜2 ** 64字節);這幾乎肯定是圖書館中的一個錯誤。 – nneonneo