我有以下格式(標籤標示)一些輸入數據進行比較哈希值:如何通過關鍵
(基因條件值)
wnt condition1 1
wnt condition2 10
wnt condition3 15
wnt condition4 -1
bmp condition1 10
bmp condition2 inf
bmp condition3 12
bmp condition4 -1
frz condition1 -12
frz condition2 -6
frz condition3 -0.3
和AM構建環比如下:
#!/usr/bin/perl
use warnings;
use strict;
use File::Slurp;
use Data::Dumper;
my @data = read_file('stack.txt');
my %hash;
foreach (@data){
chomp;
my ($gene, $condition, $value) = (/^(\w+)\t(\w+\d)\t(-?\d+|-?inf)/);
$hash{$gene}{$condition} = $value;
}
我想遍歷HoH,對於每個基因,打印出提供的值,該基因的所有值都是正數(例如10)或負數(-3)。在數據上面我只打印出:
frz condition1 -12
frz condition2 -6
frz condition3 -0.3
由於兩個其他基因包含值是正反兩方面的條件:
wnt condition1 1
wnt condition2 10
wnt condition3 15
wnt condition4 -1 # discrepancy
bmp condition1 10
bmp condition2 inf
bmp condition3 12
bmp condition4 -1 # discrepancy
我可以遍歷如下,但我不知道如何使一個環比的價值和該基因的條件,按組合鍵「下一步」值之間的比較:
for my $gene (sort keys %hash) {
for my $condition (sort keys %{$hash{$gene}}) {
my $value = $hash{$gene}{$condition};
print "$gene\t$condition\t$value\n" if $value =~ m/-/; # This obviously will only print out negative values. I want to compare all values here, and if they are all positive, or all negative, print them.
}
}
讓我知道如果我能澄清這進一步
謝謝 - 更容易理解和運作良好! – fugu
我將如何去擴展while循環到HoHoA? – fugu
@FlyingFrog:這取決於你想要做什麼。你應該問另一個問題。我認爲你有相同基因/條件的多個值? – Borodin