免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 6429 | 回复: 28
打印 上一主题 下一主题

这样的程序perl能不能做? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-10-14 20:51 |只看该作者 |倒序浏览
有一文件A,包括全部人基因名称,只有一列,举例如下:
A1BG
A1BGAS
A1CF
A2LD1
A2M
A2ML1
A2MP1
DUSP24
A3GALT2

有另一文件B,包括目标基因,也为一列,有的是单个基因,有的用/分开,表示或,格式如下:

LDHA
GABPB2
HDHD2
STYXL1 / DUSP24
PNPO
A2M
SLC12A9
MCOLN1
MFSD3 / LOC113655

现从文件A中随机抽取100个基因,将这100个基因与文件B进行比较,输出相同基因的个数。
如上面的例子得到相同的基因为:
A2M
DUSP24

相同的基因个数为:2

将这一过程重复1000次,输出相同的个数,存放在一列:
2
3
4
6
3
4
3
5
...

不知这样的程序具有可行性吗?谢谢!

当量的部分真实数据请见附件

file.rar

3.73 KB, 下载次数: 47

论坛徽章:
0
2 [报告]
发表于 2010-10-14 20:57 |只看该作者
本帖最后由 珞水的大叔 于 2010-10-14 21:00 编辑

回复 1# bioinfor


    像这个 STYXL1 / DUSP24
两个都是基因么
还有为什么要对相同的文件做1000次呢

论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
3 [报告]
发表于 2010-10-14 20:57 |只看该作者
能做,Perl 特别擅长

论坛徽章:
0
4 [报告]
发表于 2010-10-14 21:37 |只看该作者
本帖最后由 珞水的大叔 于 2010-10-16 19:20 编辑

回复 1# bioinfor


    明白为什么要1000次了,我把那个每次随机抽100个A中不重复的基因看漏了。代码修改了一下,如下:
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use 5.010;


  5. my $yangbengeshu = 100;   #抽取样本个数

  6. my @A;
  7. open A,"<human_gene.txt";
  8. while(<A>){
  9.     chomp;
  10.     s/^\s+$//;
  11.     s/^\s+//;
  12.     s/\s+$//;
  13.     push @A,$_ if $_ ne '';
  14. }
  15. close A;

  16. if($yangbengeshu > scalar @A){
  17.     die "ERROR: 抽取样本个数大于总个数\n";
  18. }

  19. my @B;
  20. open B,"<targetgene.txt";
  21. while(<B>){
  22.     chomp;
  23.     s/^\s+$//;
  24.     s/^\s+//;
  25.     s/\s+$//;
  26.     push @B,(split /\s*\/\s*/,$_)  if $_ ne '';
  27. }
  28. close B;

  29. for(1 .. 1000){
  30.     my %rand = ();
  31.     while(scalar keys %rand < $yangbengeshu){
  32.         $rand{int(rand scalar @A)} = 0;
  33.     }
  34.     my @A_choose = map{ $A[$_] } keys %rand;
  35.     my (%m,%n);
  36.     for(@A_choose,@B){         
  37.         $m{$_}++ && $n{$_}++;
  38.     }      
  39.     say scalar keys %n;
  40. }
复制代码

论坛徽章:
0
5 [报告]
发表于 2010-10-14 21:49 |只看该作者
本帖最后由 greencow 于 2010-10-14 22:41 编辑

欲善其事,先利其器。如果做bioinformatics,建议在短期内打好perl和R的基础。这个问题,用perl并不复杂,用R更简单,用Statistics::useR最简单

貌似4楼的脚本忘了随机抽取。

论坛徽章:
0
6 [报告]
发表于 2010-10-15 09:06 |只看该作者
回复 4# 珞水的大叔


    大叔,你有没有兴趣搞生物基因阿, 你也太牛了!
    你现在做什么呢?

论坛徽章:
0
7 [报告]
发表于 2010-10-15 09:11 |只看该作者
求两个数组相同的元素了,cookbook中介绍了好多种方法

论坛徽章:
0
8 [报告]
发表于 2010-10-15 09:42 |只看该作者
本帖最后由 珞水的大叔 于 2010-10-15 09:43 编辑

回复 6# dahe_1984


    自从高中毕业后已经若干年没有接触过基因这种东西了……
   现在在个公司做系统管理员
   不过我对正则表达式很有兴趣,有什么这方面的东西可以一起讨论下

论坛徽章:
0
9 [报告]
发表于 2010-10-15 10:04 |只看该作者
{:3_190:}正则是好东西。。。

论坛徽章:
0
10 [报告]
发表于 2010-10-15 14:54 |只看该作者
#!/usr/bin/perl
use strict;
my (@a,@b,%randed,$key,$value,%count);
open (F,"human_gene.txt");
while (<F>){  
        s/\s+$//;
        chomp;
        push (@a,$_) unless /^$/;
}
       
open (FH,"targetgene.txt")||die "Can't open file: $!\n";
while(<FH>){
        s/\s+\/\s+/\r/;
        s/\s+$//;
        #next if /^$/;
        chomp;
        push (@b,$_) unless /^$/;
}

for (0..9){
$key = $_;
        foreach (@b){
                   #$count{$key}=0;
                  %randed=map{$a[int rand (@a)],0}0..99;                                 
                   $count{$key}++ if (exists $randed{$_});          
                  }   
                  print $count{$key},"\n"
                 }
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP