概述
统计最新版的cufflinks的矩阵结果和差异表达结果(针对基因),涉及的数据结构比较复杂,有二维数组,hash的数组,数组的hash等等:
#!/usr/bin/env perl
use warnings;
use strict;
die "perl $0 <file: norm.fpkm/diff.fpkm> <option: interclass/interblock/de> <outprefix>n" if(@ARGV ne 3);
open EXP, $ARGV[0] or die $!;
my $string = <EXP>;
chomp($string);
my @labels = split /t/, $string;
shift @labels;
@labels = map {$_ =~ s/_d+$// ? $_ : $_} @labels;
my ($sum, @gene, %hash, @rc, @final);
if($ARGV[1] eq "interblock")
{
open OUT, ">> $ARGV[2].txt" or die $!;
my ($x, $flag) = (0, 0);
for(my $i = 0; $i < @labels; $i ++)
{
if(exists $hash{$labels[$i]})
{
push @{$rc[$x]}, $i;
$flag = 1;
}else{
$x ++ if($flag == 1);
$hash{$labels[$i]} = 0;
push @final, $labels[$i];
push @{$rc[$x]}, $i;
}
}
=cut
for (my $i = 0; $i < @rc; $i ++)
{
for (my $j = 0; $j < @{$rc[$i]}; $j ++)
{
print "$it$rc[$i][$j]n";
}
}
=cut
while(<EXP>)
{
chomp;
my @tmp = split;
for(my $i = 0; $i < @rc; $i ++)
{
my $fpkm;
for(my $j = 0; $j < @{$rc[$i]}; $j ++)
{
$fpkm += $tmp[$rc[$i][$j] + 1];
}
if($fpkm > 0 and $tmp[0] !~ /^XLOC/)
{
$gene[$i]{ref} ++;
}elsif($fpkm > 0){
$gene[$i]{new} ++;
}
}
}
print OUT "nTYPE: interBlockn";
for(my $i = 0; $i < @final; $i ++)
{
print OUT "$final[$i]t";
foreach my $key(sort keys %{$gene[$i]})
{
print OUT "$key: $gene[$i]{$key}t";
}
print OUT "n";
}
}elsif($ARGV[1] eq "interclass"){
open OUT, "> $ARGV[2].txt" or die $!;
my $all_sum;
while(<EXP>)
{
chomp;
my @tmp = split;
my $all;
for(my $i = 1; $i < @tmp; $i ++)
{
$all += $tmp[$i];
if($tmp[$i] > 0 and $tmp[0] !~ /^XLOC/)
{
$gene[$i - 1]{ref} ++;
}elsif($tmp[$i] > 0){
$gene[$i - 1]{new} ++;
}
}
$all_sum ++ if($all > 0);
$sum ++;
}
print OUT "All genes: $sumn";
print OUT "All samples cover: $all_sumnn";
print OUT "TYPE: interClassn";
for(my $i = 0; $i < @labels; $i ++)
{
print OUT "$labels[$i]t";
foreach my $key(sort keys %{$gene[$i]})
{
print OUT "$key: $gene[$i]{$key}t";
}
print OUT "n";
}
}elsif($ARGV[1] eq "de"){
open OUT, "> $ARGV[2].txt" or die $!;
open DE, "> $ARGV[2].diffexpression.txt" or die $!;
print DE "$stringn";
my %gene;
while(<EXP>)
{
chomp;
my @tmp = split;
if(abs($tmp[9]) > 1 and $tmp[13] eq "yes")
{
print DE "$_n";
$hash{$tmp[4]."-".$tmp[5]} ++;
if($tmp[9] > 1)
{
$gene{$tmp[4]."-".$tmp[5]}[0] ++;
}elsif($tmp[9] < -1){
$gene{$tmp[4]."-".$tmp[5]}[1] ++;
}
}
}
foreach my $key(keys %hash)
{
$gene{$key}[0] = 0 if(!defined $gene{$key}[0]);
$gene{$key}[1] = 0 if(!defined $gene{$key}[1]);
print OUT "$key: $hash{$key}tUP: $gene{$key}[0]tDOWN: $gene{$key}[1]n";
}
}else{
die "check correct optionn";
}
最后
以上就是暴躁犀牛为你收集整理的统计2.2.1cufflinks的矩阵和差异表达结果--大量数据结构的全部内容,希望文章能够帮你解决统计2.2.1cufflinks的矩阵和差异表达结果--大量数据结构所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复