【问题标题】:Looping through array and grouping data based on a criteria in perl [closed]根据perl中的条件循环遍历数组和分组数据[关闭]
【发布时间】:2015-05-17 21:11:57
【问题描述】:

我有一个如下所述的包含四列的数组。每列分别代表开始、结束位置、DNA 链和基因。我想将每一行分类为如下所述的组数。

标准:当一行的结束位置和下一行的开始位置之间的差异小于55时,它将被分组到一个列表中。

410 1750 + dnaA     
1939 3075 + dnaB     
3206 3421 + daaR    
3437 4549 + becG     
4567 4812 + yaaB  
4860 6783 + vyrY   
15915 17381 + guaB   
19062 19946 + UsaD  
19968 20558 + byaE

output format:

List 1:  
410 1750 + dnaA

List 2:  
1939 3075 + dnaN

List 3:  
3206 3421 + yaaA  
3437 4549 + recF  
4567 4812 + yaaB  
4860 6783 + gyrB

List 4:   
15915 17381 + guaB

List 5:   
19062 19946 + yaaD   
19968 20558 + yaaE

【问题讨论】:

  • Stack Overflow 是一个网站,经验丰富的程序员可以在该网站上向同行寻求帮助,以解决他们遇到的问题。这不是世界免费完成软件工程的机会。你会考虑免费提供你作为生物学家的技能吗?您认为软件工程师是一份真正的工作吗?
  • Mr.Borodin 我是一名本科生,正在研究癌症数据,为我的项目寻找重要的基因。我以前从未上过编程课程,而且我付不起软件工程师的钱来做这件事。我只是在寻求帮助。一旦我通过我的研究成为生物学家,我选择生物学来为社区服务,而不仅仅是为了钱。如果可能,请帮助我。谢谢
  • @fugu 我把它读作“研究生”学生...... sigh 不管怎样,没有代码,这个问题应该暂时关闭。
  • @Angie 我想知道您是否不会从从事您打算在毕业后进行的研究的制药公司领取薪水,以及他们是否会免费提供所得药物。一切都是为了帮忙,对吧?我们的满足感会让我们的胃保持饱足!

标签: arrays perl loops conditional grouping


【解决方案1】:

您可以使用以下内容作为开始。

我假设,数据部分由单个空格分隔,如您的示例中所示,并且数据位于名为“data.txt”的文件中。

结果是一个数组,其中包含要组合在一起的元素。

#!/usr/bin/perl
#

use strict;
use warnings;

use Data::Dumper;

open(my $fd, "<", "data.txt")
    || die("could not open file: $!");


my @sets;

my %last;
my $set_index = 0;

while (<$fd>) {

    my %current;

    ($current{start}, $current{end}, undef, $current{sequence}) = split(" ", $_);
  if(exists($last{end}) &&
       $current{start} - $last{end} >= 55) {
        push(@sets, []);
        $set_index++;
    }
    push(@{$sets[$set_index]}, \%current);

    %last = %current;
}

print Dumper(@sets);

除了了解数组和散列之外,您还需要了解如何使用 perl 使用引用构建复杂的数据结构。这个在http://perldoc.perl.org/perlref.html有解释,在http://perldoc.perl.org/perlreftut.html有深入介绍。

这绝对不是实现你想要的最简洁的方法,但我希望它是可以理解的。

但是,如果您不尝试了解正在发生的事情,您将不会有太多使用它的乐趣,因为您需要自己进行更改。

【讨论】:

  • 如果您想更正您的代码,请随意提出一个新问题。
猜你喜欢
  • 2016-07-02
  • 2021-12-06
  • 2013-12-11
  • 2020-01-06
  • 1970-01-01
  • 2015-11-21
  • 2021-12-15
  • 2019-09-27
  • 2019-10-22
相关资源
最近更新 更多