遺伝子のセットと既存の遺伝子のペアが与えられた場合、まだ存在しない新しい遺伝子のペアを生成したいと考えています。
遺伝子ファイルの形式は次のとおりです。
123
134
23455
3242
3423
...
...
遺伝子ペア ファイルの形式は次のとおりです。
12,345
134,23455
23455,343
3242,464452
3423,7655
...
...
しかし、known_interactions と new_pairs の間に共通する要素はまだほとんどありません。エラーがどこにあるのかわかりません。
引数については、
perl generate_random_pairs.pl entrez_genes_file known_interactions_file 250000 15880
の共通要素を取得しました。数値 250000 は、プログラムに生成させたいランダム ペアの数を示しています。
#! usr/bin/perl
use strict;
use warnings;
if (@ARGV != 3) {
die "Usage: generate_random_pairs.pl <entrez_genes> <known_interactions> <number_of_interactions>\n";
}
my ($e_file, $k_file, $interactions) = @ARGV;
open (IN, $e_file) or die "Error!! Cannot open $e_file\n";
open (IN2, $k_file) or die "Error!! Cannot open $k_file\n";
my @e_file = <IN>; s/\s+\z// for @e_file;
my @k_file = <IN2>; s/\s+\z// for @k_file;
my (%known_interactions);
my %entrez_genes;
$entrez_genes{$_}++ foreach @e_file;
foreach my $line (@k_file) {
my @array = split (/,/, $line);
$known_interactions{$array[0]} = $array[1];
}
my $count = 0;
foreach my $key1 (keys %entrez_genes) {
foreach my $key2 (keys %entrez_genes) {
if ($key1 != $key2) {
if (exists $known_interactions{$key1} && ($known_interactions{$key1} == $key2)) {next;}
if (exists $known_interactions{$key2} && ($known_interactions{$key2} == $key1)) {next;}
if ($key1 < $key2) { print "$key1,$key2\n"; $count++; }
else { print "$key2,$key1\n"; $count++; }
}
if ($count == $interactions) {
die "$count\n";
}
}
}