私は「遅い」はサイズが微細になり、ファイルを読み込むことよね。それよりも長く、ソフトウェア以外のものが問題です。ファイルがどこにあるのか、オペレーティングシステム、処理する前にファイルを操作したかどうか(たとえば、テキストエディタでファイルを開くなど)を尋ねるのが適切なのかもしれません。
メモリが不足しているために「速度が遅すぎる」場合は、チャンクを読み込むと役立ちます。 Rsamtools
fa = "my.fasta"
## indexFa(fa) if the index does not already exist
idx = scanFaIndex(fa)
と、Nに、例えば、インデックスのチャンクを作成= 10のチャンク
chunks = snow::splitIndices(length(idx), 10)
し、ファイル
res = lapply(chunks, function(chunk, fa, idx) {
dna = scanFa(fa, idx[chunk])
## ...
}, fa, idx)
使用do.call(c, res)
又は最終結果を連結と同様の処理単一の値を累積している場合はforループを使用してください。 fastaファイルを索引付けするには、samtoolsライブラリーを呼び出します。コマンドラインでsamtoolsを使用することも、Windows以外の場合のオプションです。
代替は、次に(偶数で、Rの内のレコードを読み出し、各レコードは、DNA配列の単一の行から構成されている場合、その
idx = fasta.index(fa, seqtype="DNA")
chunks = snow::splitIndices(nrow(fai), 10)
res = lapply(chunks, function(chunk) {
dna = readDNAStringSet(idx[chunk, ])
## ...
}, idx)
とを介してチャンク次いで、インデックスにファイルをBiostrings::fasta.index()
を使用することです-numbered)これは役立つかもしれない
con = file(fa)
open(fa)
chunkSize = 10000000
while (TRUE) {
lines = readLines(fa, chunkSize)
if (length(lines) == 0)
break
dna = DNAStringSet(lines[c(FALSE, TRUE)])
## ...
}
close(fa)
比較的容易そこでから
readLines()
と処理を経由してチャンク:あなたは周波数を計算している場合はhttp://amunategui.github.io/dealing-with-large-files/理由はありませんRAM全体を一度に保持しようとする。あなたはチャンクでデータを読むのに役立つ複数のパッケージがあるようです。例えば。 https://cran.r-project.org/web/packages/chunked/chunked.pdf –bioconductorパッケージである 'Biostrings'をお勧めします。これは非常に高速であり、 'Biostrings :: oligonucleotideFrequency'のような異なる長さと組み合わせのヌクレオチドフリークエンシーを扱う一連の機能を持っています。 – mt1022
私は 'Biostrings'の機能に慣れていますが、実際に使用するためにfastaファイルをRに読み込む方法はわかりません – user3067923