私は2つのテーブルを持っています。これらは両方とも染色体の形であり、この染色体の開始座標と終了座標の両方にあります。第1の表は遺伝子を含み、第2の表はこれらの遺伝子に含まれてもしなくてもよい短い配列を含む。私の実際のデータセットでは、遺伝子は約50,000行であり、配列は約7.000.000行であり、両方のテーブルにはさまざまな余分な列があります。私は2つのテーブルの重複を見つけたいと思います。テーブルの交差効率の向上
chromosome=as.character(rep(c(1,2,3,4,5), each=10000))
start=floor(runif(50000, min=0, max=50000000))
end=start+floor(runif(10000, min=0, max=10000))
genes=cbind(chromosome, start, end)
startseq=floor(runif(7000000, min=0, max=50000000))
endseq=startseq+4
sequences=cbind(chromosome, startseq, endseq)
私が使用しているすべての交差を見つけようとしています:
for (g in 1:nrow(sequences)) {
seqrow=as.vector(sequences[g,])
rownr=which(genes[,1]==seqrow[1] & genes[,2] < seqrow[2] & genes[,3] > seqrow[3])
print(rownr)
}
私は私が私の本当のデータセットを持っている余分な列に対してアクションを実行するには、これらの行番号を使用する予定です。現在の問題は、記述されたプロセスがかなり遅いことです。どのようにしてこの交差をスピードアップできますか?
@ emilliman5コードのように見えますが、私はまだ1つのことをコメントしたいと思います。これらのテーブル、 'genes'と' sequences'を作成するときは、 'cbind'関数を使います。そして、すべての入力が原子ベクトルであり、そのうちの1つが文字ベクトル( '染色体')であるので、文字行列を作成します。タイプ「頭(染色体)」 - すべての数字は実際に文字列になりました。後で数字を比較したいときは、それは適切ではないと思います。そのような場合には、 'data.frame(sequences、start、end)'の代わりに 'data.frame'をここで' matrix'の代わりに作成する必要があります。 –
あなたはそれを言及していただきありがとうございます。 – Xizam