データの負荷を配列のハッシュのハッシュに整理しようとしています。値などを手動で宣言している場合、次は正常に機能します。
#!/usr/bin/perl
use warnings;
use strict;
use Data::Dumper;
$Data::Dumper::Sortkeys = 1;
my %experiment = (
'gene1' => {
'condition1' => ['XLOC_000157', '90', '0.001'],
'condition2' => ['XLOC_000347','80', '0.5'],
'condition3' => ['XLOC_000100', '50', '0.2']
},
'gene2' => {
'condition1' => ['XLOC_025437', '100', '0.018'],
'condition2' => ['XLOC_000322', '77', '0.22'],
'condition3' => ['XLOC_001000', '43', '0.002']
}
);
次に、キー/値を出力します。
for my $gene (sort keys %experiment) {
for my $condition ( sort keys %{$experiment{$gene}} ) {
print "$gene\t$condition\t";
for my $values (@{$experiment{$gene}{$condition}} ) {
print "[$values]\t";
}
print "\n";
}
}
出力:
gene1 condition1 [XLOC_000157] [90] [0.001]
gene1 condition2 [XLOC_000347] [80] [0.5]
gene1 condition3 [XLOC_000100] [50] [0.2]
gene2 condition1 [XLOC_025437] [100] [0.018]
gene2 condition2 [XLOC_000322] [77] [0.22]
gene2 condition3 [XLOC_001000] [43] [0.002]
ただし、私が取り組んでいる実際のデータは大きすぎて手動で宣言できないため、上記と同じ結果を達成できるようにしたいのですが、各フィールドを含む配列から始めます。次に例を示します。
入力例:
condition1 XLOC_000157 1.04564 0.999592 99.66 gene1
condition1 XLOC_000159 0.890436 0.999592 99.47 gene2
condition2 XLOC_000561 -1.05905 0.999592 91.57 gene1
condition2 XLOC_00076 -0.755473 0.999592 99.04 gene2
入力を配列に分割します。
my (@gene, @condition, @percent_id, @Xloc, @change, @q_value @split, %experiment);
while (<$list>) {
chomp;
@split = split('\t');
push @condition, $split[0];
push @Xloc, $split[1];
push @change, $split[2];
push @q_value, $split[3];
push @percent_id, $split[4];
push @gene, $split[5];
}
私はHoAを構築して、これを次のように保存しています:
push @{$results{$gene_name[$_]} }, [ $Xloc[$_], $change, $q_value, $percent_id[$_] ] for 0 .. $#gene_name;
しかし、私は現在、各 HoA の「状態」情報を統合して、HoHoA を構築しようとしています。理想的には、上記と同様の方法で while ループ内で (したがって「動的に」) これを実行して、次のデータ構造を実現したいと考えています。
$VAR1 = {
'gene1' => {
'condition1' => [
'XLOC_000157',
'1.04564',
'0.999592',
'99.66'
],
'condition2' => [
'XLOC_000561',
'-1.05905',
'0.999592'
'91.57'
],
},
'gene2' => {
'condition1' => [
'XLOC_000159',
'0.890436',
'0.999592'
'99.47'
],
'condition2' => [
'XLOC_00076',
'-0.755473',
'0.999592'
'99.04'
],
}
};