유전자 세트와 기존 유전자 쌍이 주어지면, 나는 이미 존재하지 않는 새로운 쌍의 유전자를 생성하려고합니다.생성 된 무작위 쌍이 이미 존재하지 않는 것을 확인하는 숫자 목록에서 무작위 쌍을 생성하십시오.
유전자 파일의 형식은 다음과 같습니다
123
134
23455
3242
3423
...
...
유전자 쌍 파일의 형식은 다음과 같습니다
12,345
134,23455
23455,343
3242,464452
3423,7655
...
...
을하지만 난 여전히 known_interactions와 new_pairs 사이의 몇 가지 일반적인 요소를 얻을. 오류가 어디 있는지 모르겠습니다. 인수에 대한
,펄 generate_random_pairs.pl entrez_genes_file known_interactions_file
250000 내가 번호 250000 내가 프로그램을 생성 할 얼마나 많은 임의 쌍 알려주는 것이다 15880.의 공통 요소를 가지고.
#! 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";
}
}
}
하지 않았다, 두 파일의 데이터는 efffectively's의와 chomped한다/\ s + \ z //'. void 문맥에서'map'을 사용하면 안됩니다 : for가'for'입니다.그리고 C 스타일의'for' 루프는 C에서 거의 필요하지 않습니다 : for my $ i (0 .. $ # genes) {...}'를 사용하거나 배열의 * contents * 내 $ genes_i (@genes) {...}' ' – Borodin
@ 보 로딘 실제로, 나는 고쳐 주었고 \ z는 눈치 채지 못했다. for 루프는 반복을 피하기 위해 필요합니다. 나는 바보 였고 $ k = $ n 대신 $ k = 0을 썼다. 그리고 나는 상호 작용하는 쌍을 분류하여 고유 한 이름을 얻는 것에 대한 나의 입장을 고집합니다. – terdon
@Borodin 나는 여기에서 좀 새로운 사람이다. 나는 당신을 PM 할 수있는 방법이있어, 나는 OP의 질문을 훔치지 않는다? 어쩌면 당신은 내가 무효 맥락에서지도를 사용하는 곳을 설명 할 수있을 것입니다. 당신의 프로파일을 보았을 때, 나는 그것을 얻지 못한다는 것을 의심하지 않습니다. – terdon