【问题标题】:hash of arrays to create unique ids数组哈希以创建唯一 ID
【发布时间】:2016-11-20 20:38:44
【问题描述】:

我想为带有基因转录本的文件创建唯一 ID。每行由以下列格式协调的transcript_id 和内含子组成:chromosome:start_coord-end_coord:strand。 我的文件如下所示:

CUFF.59321      chr7:134136506-134143748:-
CUFF.59321      chr7:134135655-134136337:-
CUFF.59321      chr7:134134550-134135537:-
CUFF.59321      chr7:134133872-134134471:-
CUFF.59321      chr7:134133246-134133748:-
CUFF.59321      chr7:134132814-134133138:-
CUFF.57276      chr7:25163747-25164818:-
CUFF.57276      chr7:25163469-25163569:-

我想为它们组合重复的 transcript_ids(第 1 列)和起点坐标。 CUFF.57276 示例:

CUFF.57276 chr7:25163747-25164818:25163469-25163569:-

为此,我使用了数组哈希。

#!/usr/bin/perl -w

use strict;

my $input_gtf = shift @ARGV or die $!;

my %hash;

open (FILE, "$input_gtf") or die $!;
while (<FILE>) {
    my $line = $_;
    chomp $line;
    my @array = split /:\s+/, $line;
    my $cuff = $array[0];
    my @introns = $array[1];
    $hash{$cuff} = [@introns];
}
foreach my $cuff(keys %hash) {
    print "$cuff:${hash{$cuff}}\n";
}

close FILE;

但是我得到了以下输出:

CUFF.61092      chr8:67968840-67969614:-:ARRAY(0x16a8b10)
CUFF.30258      chr19:16636489-16638890:-:ARRAY(0x15f3b00)
CUFF.47340      chr4:85719262-85722802:-:ARRAY(0x2ae38599de90)

如何可视化 ARRAY(0x16a8b10) 语句或类似语句中的值?

【问题讨论】:

    标签: hash bioinformatics bioperl


    【解决方案1】:

    输入中: 之后没有空格,因此$array[1] 为空。此外,您不想为每一行覆盖$hash{$cuff},而是希望将新范围push 覆盖到现有数组中。 @{ ... }数组解引用,它将数组引用转换为它所引用的数组。

    这是我的脚本版本:

    #!/usr/bin/perl
    use warnings;
    use strict;
    
    my $input_gtf = shift or die $!;
    
    my %hash;
    
    open my $FILE, $input_gtf or die $!;
    while (my $line = <$FILE>) {
        chomp $line;
        my @array = split /:/, $line;
        my ($cuff, $introns) = @array;
        push @{ $hash{$cuff} }, $introns;
    }
    close $FILE;
    
    for my $cuff (keys %hash) {
        print join ':', $cuff, @{ $hash{$cuff} };
        print "\n";
    }
    

    我对代码所做的无关更改:

    • 词法文件句柄的使用。它们更安全,更容易通过。
    • 无需使用$_ 仅将其存储在不同的变量中。您可以将&lt;&gt; 直接分配给变量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-19
      • 2015-02-19
      • 1970-01-01
      • 2011-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-27
      相关资源
      最近更新 更多