我是靠谱客的博主 暴躁犀牛,最近开发中收集的这篇文章主要介绍统计2.2.1cufflinks的矩阵和差异表达结果--大量数据结构,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

统计最新版的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的矩阵和差异表达结果--大量数据结构所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(55)

评论列表共有 0 条评论

立即
投稿
返回
顶部