私は仕事の問題を解決しようとしていて、初心者のプログラマーです。タブ区切りの 3 つのファイルがあります。
File1 には 2 つのフィールドがあります: *Marker_id* & positionこのファイルは位置 (0-26) でソートされ、Marker_id は別のアプリケーションの結果であるがアルファベット順ではありません。Marker_id の順序は重要です。私のプログラムの目的は、開始 Marker_id を見つけて、それと終了 Marker の間の Marker の数を数えることです。このファイルには、約 2,500,000 のエントリが含まれています。
File2 には 1 つのフィールド *Marker_id* があります。これは File1 で使用されている Marker_id と同じですが、このファイルには約 2,200,000 エントリしか含まれていません。このファイルは、プログラムでカウントする必要がある「アクティブな」マーカーまたはマーカーのリストです。
File3 にはフィールドposition *starting_marker*終了マーカー*number_markers* およびその他のフィールドがあります。基本的に、開始と終了の間のマーカーの数を数えて number_markers フィールドを更新する必要があります。
file1 を読み込むコードが既にあります
vector< list<marker> >;
ここで、marker は構造体です:
struct MARKER{
string snp_id;
bool included;
MARKER(string temp_id) : snp_id(temp_id), included(false) { }
};
ファイル 1 の位置 (0 ~ 26) は、マーカーを格納するベクトル内のインデックスを指定します。また、開始と停止の間のマーカーの数で file3 のカウントを正常に更新します。
しかし、リストを「アクティブなマーカー」のみにトリミングする機能の実装に問題があります。私は単純に MARKER.included(true); を実行するつもりでした。file2 に位置が含まれていないことに気付くまで、file2 のエントリを検索します。そのため、各ベクトル インデックスですべてのリストを検索する必要があります。これは可能ですが、非常に多くのエントリがあると信じられないほど遅くなるように感じます.
キーがMarker_idであるマップにfile1を保存するなどの代替案を考えようとしていますが、カウントのためにMarker_idを元の順序で保持する必要があるため、ハングアップします。
誰かアドバイスはありますか?ありがとう。
更新 (サンプル ファイル):
***File1***
Marker_id position
test_marker_1 1
test_marker_2 1
test_marker_3 1
test_marker_4 1
test_marker_5 1
test_marker_6 1
test_marker_7 1
test_marker_8 1
test_marker_9 1
.
***File2***
Marker_id C20020.Log R Ratio C20020.B Allele Freq
test_marker_1 0.0180 0.0010
test_marker_3 -0.0340 0.5000
test_marker_4 0.0500 0.0700
test_marker_5 0.0500 0.0700
test_marker_6 0.0500 0.0700
test_marker_7 0.0500 0.0700
test_marker_9 0.0500 0.0700
注: test_marker_2 と test_marker_8 はファイル 2 から省略されているため、カウントには含まれません。
***File3***
position copy_num sampleID startMarker endMarker conf num_Markers
1 4 C20020 test_marker_1 test_marker_3 1774.967 0
1 3 C20020 test_marker_3 test_marker_5 17.967 0
1 0 C20020 test_marker_7 test_marker_9 107.967 0
.
***My desired output***
position copy_num sampleID startMarker endMarker conf num_Markers
1 4 C20020 test_marker_1 test_marker_3 1774.967 2
1 3 C20020 test_marker_3 test_marker_5 17.967 3
1 0 C20020 test_marker_7 test_marker_9 107.967 2
現時点では、file2 に見つからないマーカーを除外していないため、3 つの例すべてでカウントが 3 になる以外はすべて機能しています。