[英]Perl: For each key in hash printing the first value…in the next loop the second and so on
所以,
我将大量具有生物学序列的.txt文件数据输入到我的@col数组中...我需要每个位置出现几个字母(A,C,G,T)的频率...一切都很好。它可以工作,但我想像这样转置输出...
输出为:
A 1.112 1.124 1.258
C 1.154 1.122 1.587
G 1.158 1.454 1.478
电话1.154 1.125 1.478
但是我想转置...我的意思是将行变成列...
交流GT
1.112 1.154 1.154 1.154
等等
编码:
@col = {GTGTCCATTAGAGGGCGCCA GCAGCCTCCTGAGGACGCCA GAGACCTCAAGGGGCCACTA GGGGCCACTAGGGGGCTCGA ATGGCCACAAGAGGGCGTCA CTGCCCGCCCGGCGGCGCCG GCGGGCAGCAGGGGGAGCCG ATCACCACCAGGTGGCGCCG AAGGACACTAGGTGGAGCCA TCGGCCGGCAGAGGGCGCTG ATGACCGCCAGGGGTCGCTC ACCACCAGCAGGGGGCACCT GCAGCCCGTGGGGGGCGCCG GTGGGCGGCAGGGGGCGCTG CCAGCCTCTAGGGGCCACTG TTGACCACCAGATGGTGGTA CCTGCCGAAAGGGGGCAGTG and so on }
foreach my $row(@col)
{
++$pwm{ substr $row, $_, 1 }[ $_ ] for 0 .. length( $row ) -1; #holt die Teilstrings aus der Zeile, sprich Pos 1, Pos2....
}
@col=(); # benoetige leeres array fuer oben
@$_ = map{ $_ ? ($_/$row_counter)+1 : 1 } @$_ for values %pwm;
print "$_ @{ $pwm{$_}}\n" for sort keys %pwm;
这似乎可以满足您的需求,尽管令您惊讶的是您希望频率从1到2而不是从0到1变化
use strict;
use warnings 'all';
my @col = qw/
GTGTCCATTAGAGGGCGCCA
GCAGCCTCCTGAGGACGCCA
GAGACCTCAAGGGGCCACTA
GGGGCCACTAGGGGGCTCGA
ATGGCCACAAGAGGGCGTCA
CTGCCCGCCCGGCGGCGCCG
GCGGGCAGCAGGGGGAGCCG
ATCACCACCAGGTGGCGCCG
AAGGACACTAGGTGGAGCCA
TCGGCCGGCAGAGGGCGCTG
ATGACCGCCAGGGGTCGCTC
ACCACCAGCAGGGGGCACCT
GCAGCCCGTGGGGGGCGCCG
GTGGGCGGCAGGGGGCGCTG
CCAGCCTCTAGGGGCCACTG
TTGACCACCAGATGGTGGTA
CCTGCCGAAAGGGGGCAGTG
/;
my %pwm;
for ( @col ) {
my @row = split //; #/
for my $i ( 0 .. $#row ) {
my $k = $row[$i];
++$pwm{$k}[$i];
}
}
for my $counts ( values %pwm ) {
for my $count ( @$counts ) {
$count = ( $count // 0) / @col + 1;
}
}
my @keys = sort keys %pwm;
my $fmt = '%-5s ' x @keys . "\n";
printf $fmt, @keys;
$fmt = '%.3f ' x @keys . "\n";
for my $i ( 0 .. @col ) {
printf $fmt, map { $pwm{$_}[$i] } @keys;
}
A C G T
1.294 1.176 1.412 1.118
1.118 1.412 1.059 1.412
1.176 1.118 1.647 1.059
1.294 1.059 1.588 1.059
1.059 1.824 1.118 1.000
1.000 2.000 1.000 1.000
1.471 1.059 1.294 1.176
1.059 1.588 1.294 1.059
1.176 1.529 1.000 1.294
1.824 1.059 1.059 1.059
1.000 1.000 2.000 1.000
1.294 1.000 1.706 1.000
1.000 1.059 1.765 1.176
1.000 1.000 2.000 1.000
1.059 1.118 1.765 1.059
1.118 1.824 1.000 1.059
1.235 1.000 1.706 1.059
1.000 1.824 1.118 1.059
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.