小编con*_*con的帖子

在Perl6中逐行读取文件,怎么习惯?

我在Perl6中有一个基本脚本,它运行非常慢,比确切的perl5翻译慢30倍。

CONTROL {
    when CX::Warn {
        note $_;
        exit 1;
    }
}
use fatal;
role KeyRequired {
    method AT-KEY (\key) {
        die "Key {key} not found" unless self.EXISTS-KEY(key);
        nextsame;
    }
}

for dir(test => /^nucleotide_\d**2_\d**2..3\.tsv$/) -> $tsv {
    say $tsv;
    my $qqman = $tsv.subst(/\.tsv$/, '.qqman.tsv');
    my $out = open $qqman, :w;
    put "\t$qqman";
    my UInt $line-no = 0;
    for $tsv.lines -> $line {
        if $line-no == 0 {
            $line-no = 1;
            $out.put(['SNP', 'CHR', 'BP', 'P', 'zscore'].join("\t"));
            next
        } …
Run Code Online (Sandbox Code Playgroud)

perl6

7
推荐指数
1
解决办法
176
查看次数

Perl6:按值对散列进行排序并使用kv

我正在查看以下数据(JSON)

{
  "FValidation_pipelineMTHXT_v4.5.1_refLibV2": "concordance2/f",
  "FValidation_pipelineLPJL": "concordance2/c",
  "FCompetenceRuns": "concordance2/b",
  "FWGS": "concordance2/a",
  "Falidation_pipelineMTHXT": "concordance2/e",
  "FValidation_pipelineLPJL_v4.5.1_refLibV2": "concordance2/d"
}
Run Code Online (Sandbox Code Playgroud)

我试图按哈希值排序

for %files.kv -> $key, $value {
Run Code Online (Sandbox Code Playgroud)

提供所需的数据,但我希望对其进行排序。我尝试了20种不同的方法,这些方法不起作用

for %files.sort.kv  -> ($key, $value) {
Run Code Online (Sandbox Code Playgroud)

for %files.sort: *.value.kv  -> ($key, $value) {
Run Code Online (Sandbox Code Playgroud)

它的灵感来自https://docs.perl6.org/routine/sort#(Map)_method_sort ,而且一直都在起作用,但没有一个:(

如何按值对哈希进行排序?

sorting hashmap perl6 comparator columnsorting

7
推荐指数
2
解决办法
141
查看次数

如何从 TreeExplainer 获取 shap_values 的特征名称?

我正在做一个 shap 教程,并尝试获取数据集中每个人的 shap 值

from sklearn.model_selection import train_test_split
import xgboost
import shap
import numpy as np
import pandas as pd
import matplotlib.pylab as pl

X,y = shap.datasets.adult()
X_display,y_display = shap.datasets.adult(display=True)

# create a train/test split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=7)
d_train = xgboost.DMatrix(X_train, label=y_train)
d_test = xgboost.DMatrix(X_test, label=y_test)
params = {
    "eta": 0.01,
    "objective": "binary:logistic",
    "subsample": 0.5,
    "base_score": np.mean(y_train),
    "eval_metric": "logloss"
}
#model = xgboost.train(params, d_train, 5000, evals = [(d_test, "test")], verbose_eval=100, early_stopping_rounds=20)

xg_clf = …
Run Code Online (Sandbox Code Playgroud)

python machine-learning python-3.x shap

7
推荐指数
1
解决办法
1万
查看次数

无法使用Inline :: Perl5将Perl5模块导入Perl6

我正在尝试 使用手册页https://modules.perl6.org/dist/Inline::Perl5:cpan中的建议导入一个我非常喜欢https://metacpan.org/pod/Data::Printer的Perl5模块:九

使用一个非常简单的脚本

use Inline::Perl5;
my $p5 = Inline::Perl5.new;
$p5.use('Data::Printer');
Run Code Online (Sandbox Code Playgroud)

但后来我收到这个错误:

Unsupported type NativeCall::Types::Pointer<94774650480224> in p5_to_p6
  in method p5_to_p6_type at /usr/lib/perl6/site/sources/130449F27E85303EEC9A19017246A5ED249F99E4 (Inline::Perl5) line 298
  in method unpack_return_values at /usr/lib/perl6/site/sources/130449F27E85303EEC9A19017246A5ED249F99E4 (Inline::Perl5) line 375
  in method invoke at /usr/lib/perl6/site/sources/130449F27E85303EEC9A19017246A5ED249F99E4 (Inline::Perl5) line 446
  in method import at /usr/lib/perl6/site/sources/130449F27E85303EEC9A19017246A5ED249F99E4 (Inline::Perl5) line 776
  in method use at /usr/lib/perl6/site/sources/130449F27E85303EEC9A19017246A5ED249F99E4 (Inline::Perl5) line 898
  in block <unit> at inline_perl5.p6 line 4
Run Code Online (Sandbox Code Playgroud)

这里出了什么问题?如何将perl5模块导入perl6?如果有类似的方法来获取Perl6中的彩色/标签输出,我会很高兴,Data::Printer因为我找不到它.

编辑:这在这里解决:如何在Perl6中加载Perl5的Data :: Printer?

perl6

6
推荐指数
1
解决办法
152
查看次数

Perl6:为Perl5模块获取数组引用

我正在尝试使用Excel :: Writer :: XLSX在Perl6中编写Excel笔记本.

我正在使用Inline :: Perl5 via use Excel::Writer::XLSX:from<Perl5>

具体来说,我想像在Perl5中那样写一行:

$worksheet -> write_row(0,0, \@line);
Run Code Online (Sandbox Code Playgroud)

但这会给出错误

要将数组,散列或子传递给Perl 6中的函数,只需按原样传递即可.对于Perl 5的ref运算符的其他用途,请考虑使用:: =进行绑定.如果您打算捕获单个变量,则将括号括起为(...).

所以我试试建议1:

$worksheet.write_row(0,0, @line)

这给出了错误

在-e第0行调用write_row()时不是数组引用.

advice2:

$worksheet.write_row(0,0, ::=@line);
Run Code Online (Sandbox Code Playgroud)

在-e第0行调用write_row()时不是数组引用.

$worksheet.write_row(0,0, (@line));
Run Code Online (Sandbox Code Playgroud)

这给出了同样的错误.

如何在Perl6中使用Excel :: Writer :: XLSX将数组写入一行?

perl6

6
推荐指数
1
解决办法
159
查看次数

Perl6:rakudobrew无法建立mo

我想升级到Perl6的最新版本,

rakudobrew build moar
Update git reference: rakudo
Cloning into 'rakudo'...
fatal: unable to connect to github.com:
github.com[0: 140.82.114.4]: errno=Connection timed out

Failed running git clone git://github.com/rakudo/rakudo.git rakudo at /home/con/.rakudobrew/bin/rakudobrew line 57.
    main::run("git clone git://github.com/rakudo/rakudo.git rakudo") called at /home/con/.rakudobrew/bin/rakudobrew line 397
    main::update_git_reference("rakudo") called at /home/con/.rakudobrew/bin/rakudobrew line 368
    main::build_impl("moar", undef, "") called at /home/con/.rakudobrew/bin/rakudobrew line 115
Run Code Online (Sandbox Code Playgroud)

这只是一个简单的连接失败,但是我该如何解决?

perl6 raku rakudobrew

6
推荐指数
1
解决办法
68
查看次数

Raku:一个线表达式可以从字符串中捕获组?

我因此从字符串中捕获一个数字:

my $n1;
if $string1 ~~ /(<[0..4]>)$/ {
    $n1 = $0;
} else {
    put "$string1 failed regex.";
    die;
}
Run Code Online (Sandbox Code Playgroud)

这是很多行,但是我可以在一行中复制和编辑字符串,因此:

my $string2 = $group2.subst(/<[0..4]>$/, '');
Run Code Online (Sandbox Code Playgroud)

我仍在学习raku / perl6,我浏览了https://docs.perl6.org/type/Str,看起来Raku不能做到这一点……但我不确定。

有没有一种方法可以像上面的第一个代码示例一样在一行中捕获子字符串?

我在脚本中反复执行此过程,这确实会缩短脚本

string raku

6
推荐指数
2
解决办法
72
查看次数

如何像 Raku 一样在 Perl 中运行 shell 命令?

我在 Raku 中有出色的代码:

#!/usr/bin/env perl6
CONTROL {
    when CX::Warn {
        note $_;
        die
    }
}
use fatal;
role KeyRequired {
    method AT-KEY (\key) {
        die "Key {key} not found" unless self.EXISTS-KEY(key);
        nextsame
    }
}

sub execute ($cmd) {
    put $cmd;
    my $proc = shell $cmd, :err, :out;
    if $proc.exitcode != 0 {
        put 'exit code = ' ~ $proc.exitcode;
        put 'stderr ' ~ $proc.err.slurp;
       put 'stdout ' ~ $proc.out.slurp;
        die
    }
}

execute "ls *.p6"
Run Code Online (Sandbox Code Playgroud)

我说“优秀”是因为 Raku 版本运行命令,返回退出代码,并在需要时打印 stdout/stderr,并且所有这些都以易于阅读和易于理解的方式进行。

通读 …

perl raku

6
推荐指数
1
解决办法
372
查看次数

如何做哈希参考切片的总和?

我正在尝试获取哈希引用切片的总和,但失败了

#!/usr/bin/env perl

use strict;
use warnings FATAL => 'all';
use feature 'say';
use autodie ':all';
use List::Util 'sum';

my %h = (
    'a' => 1,
    'b' => 2,
    'c' => 3
);

my @letters = ('a','b');
say sum(@h{@letters}); # 1+2 = 3, which is correct
my $h = \%h; # create a reference
#say sum(@{ $h->{ @letters } }); # says "uninitialized value"
#say sum(@{ $h }->{@letters}); # not an array reference
say sum(@h->{@letters}); # @h requires explicit package …
Run Code Online (Sandbox Code Playgroud)

perl

6
推荐指数
1
解决办法
85
查看次数

Perl:减少字符串长度会增加字符串数组中的内存使用量

我正在读取一个巨大的文件,以将数据存储在一个非常大的哈希中。我试图使 RAM 使用量尽可能小。

我有一个 MWE,它在 Perl 中表现出奇怪的行为:

#!/usr/bin/env perl

use 5.038;
use warnings FATAL => 'all';
use autodie ':default';
use DDP {output => 'STDOUT', array_max => 10, show_memsize => 1}; # pretty print with "p"

my @l = split /\s+/, 'OC   Pimascovirales; Iridoviridae; Betairidovirinae; Iridovirus.';
p @l;
$_ =~ s/[\.;]$// foreach @l; # single line keeps code shorter
p @l;
Run Code Online (Sandbox Code Playgroud)

它有输出:

[
    [0] "OC",
    [1] "Pimascovirales;",
    [2] "Iridoviridae;",
    [3] "Betairidovirinae;",
    [4] "Iridovirus."
] (356B)
[
    [0] "OC",
    [1] …
Run Code Online (Sandbox Code Playgroud)

memory perl

6
推荐指数
2
解决办法
186
查看次数