あまりにも単純な質問で申し訳ありません。しかし、以下のコードで 1 つの問題が発生すると、頭が固まってしまいます。質問が続きます。
1. open(my $go_file, "<", "gene_associations_go_human.txt") or die "Can't open the file!";
2. open(my $selected_genes, "<", "my_selected_genes.txt") or die "Can't open the file!";
3. open(my $output, ">", "output_go_file.txt") or die "Can't open the file!";
4. my %go_hash;
5. chomp(my @sel_genes=<$selected_genes>);
6. while(<$go_file>){
7. chomp($_);
8. my @go_line=split("\t", $_);
9. $go_hash{$go_line[4]}=[] unless exists $go_hash{$go_line[4]};
10. push @{$go_hash{$go_line[4]}}, $go_line[2];
11. }
12. foreach my $go_term (sort keys %go_hash){
13. my @genes=@{$go_hash{$go_term}};
14. @genes= uniq(@genes);
15. my $count=0;
16. foreach my $element(@genes){
17. my $score=grep{$element eq $_} @sel_genes;
18. $count++ if($score>0);
19 }
21. @genes=sort(@genes);
22. push(@genes, ($#genes+1, $count));
23. print $output($go_term."\t".join("\t",@genes)), "\n";
24. }
25. close($go_file);
26. close($selected_genes);
27. close($output);
編集:入力ファイルと出力ファイルの例
**$go_file:**
UniProtKB A0A183 LCE6A NA GO:0031424
UniProtKB A0A5B9 TRBC2 NA GO:0016021
UniProtKB A0AUZ9 KANSL1L NA GO:0000123
UniProtKB A0AV02 SLC12A8 NA GO:0006813
UniProtKB A0AV02 SLC12A8 NA GO:0015293
UniProtKB A0AV02 SLC12A8 NA GO:0016021
**$selected_genes:**
DOLPP1
SPIC1
KANSL1L
SLC12A8
TRAF1
CDF7
**$output should be like this:**
GO:0000123 KANSL1L 1 1
GO:0006813 SLC12A8 1 1
GO:0031424 LCE6A 1 0
GO:0015293 SLC12A8 1 1
GO:0016021 SLC12A8 TRBC2 2 1
関連する(ファイルの ) に基づいて ( ファイルの )遺伝子の配列を保持する ( に基づく ) を作成%go_hash
しているため、 の配列の長さは異なる場合があります。別のファイル があります。このファイルには、5000 を超える固有の遺伝子が 1 列しかありません。の各配列内の遺伝子の数を数え、リストにも存在する各配列の遺伝子の数を見つける必要があります(重複がない場合は、そこにあるはずです)。次に、これら 2 つの数値をハッシュ内の対応する配列の末尾に追加し、新しいファイルを作成します。この出力ファイルに出力される最終結果は、1 つの考えを除いてすべて問題ありません。カウンタ変数、各配列の重複する遺伝子の数 は、次のようになります。$go_file
3rd column
$go_terms
5th column
%go_hash
$selected_genes
%go_hash
$selected_genes
0
$output
$count
$selected_genes
0
いつも。(実際は重複が多いので、いつもとは限りません0
)。私は多くの方法を試しましたが、特にコードの 15 番目から 19 番目の行で、変更はありませんでした。問題はコードの他の部分にある可能性があります。
私はどこで間違いをしていますか?誰かが私を修正できますか?事前に、コメント/ヘルプに感謝します。