首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >需要帮助使用带有随机排列数的循环,并将置换值提供给perl代码。

需要帮助使用带有随机排列数的循环,并将置换值提供给perl代码。
EN

Stack Overflow用户
提问于 2020-11-20 11:34:42
回答 1查看 70关注 0票数 1

我有一个写得很好的perl代码(不是我编写的),我想使用它进行一些分析,并需要它用不同的输入参数迭代1000次以上。我将解释:

代码语言:javascript
运行
复制
perl cmh-test.pl --input C1_E1_C2_E2_C3_E3_C4_E4_java.sync --output C1_E1_C2_E2_C3_E3_C4_E4_java.latest.cmh --min-count 20 --min-coverage 30 --max-coverage 400 --population 1-2,3-4,5-6,7-8 --remove-temp

现在我想运行相同的代码1000次,但是每次都要更改--population参数,比如第一次在哪里运行1-2,3-4,5-6,7-8,下一次就变成1到8的随机排列,比如1-3,2-4,5-7,6-8等等。我该怎么做?

任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-20 16:53:00

正如brian在评论中所建议的,请参阅daxim在Reddit上发布的答案:https://www.reddit.com/r/perl/comments/jxneae/need_help_for_a_loop_with_random_permuted_numbers/

下面是一种不使用Algorithm::Combinatorics的替代解决方案。请注意,shuffle可以生成重复排列。还请注意,每次运行脚本时,使用常量随机种子(如下面所示)生成相同的排列序列。如果您不关心脚本跨实例的可再现性,请记住删除srand语句。

代码语言:javascript
运行
复制
#!/usr/bin/env perl

use strict;
use warnings;
use feature qw( say );
use List::Util qw( shuffle );

# Use fixed seed to generate reproducible results across calls to this
# script. Omit this to use a default seed every instance:
srand 42; 

my @orig_pop = 1..8;

# Using strings to name output files: *_0001.cmh .. *_1000.cmh.
# Use numbers (1 .. 1000) if you want output files named: *_1.cmh .. *_1000.cmh.
for my $iter ( '0001' .. '1000' ) {
    my @pop = shuffle @orig_pop;
    # Using a hash to make array @pop into pairs:
    my %pop = @pop;
    my $pop = join ',', map { "$_-$pop{$_}" } grep { exists $pop{$_} } @pop;
    my $cmd = qq{perl cmh-test.pl } .
        qq{--input C1_E1_C2_E2_C3_E3_C4_E4_java.sync } .
        qq{--output C1_E1_C2_E2_C3_E3_C4_E4_java.latest_${iter}.cmh } .
        qq{--min-count 20 --min-coverage 30 --max-coverage 400 } .
        qq{--population $pop --remove-temp};
    say $cmd;
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64928735

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档