Как отфильтровать вектор по массиву в Statistics :: Basic :: ComputedVector? - PullRequest
1 голос
/ 09 марта 2011

Я хочу использовать Statistics :: Basic :: ComputedVector set_filter, но фильтр, который я хочу использовать, представляет собой массив из 1 и 0.Возможно ли это?

Вот что я хочу сделать:

my $v1 = vector(1,2,3,4,5);
my @filter = qw(1 0 0 1 1);
my $cv = computed($v1);
$cv->set_filter(@filter);

Я попробовал следующее:

my $v1  = vector(1,2,3,4,5);
my $compV1 = computed($v1);
my @filter = (1) x $compV1->query_size();
$filter[-1] = 0;
say $compV1;
$compV1-> set_filter( sub { grep { $filter[$_] } 0..$#_ } );
say $compV1;

… но это печатает:

[1, 2, 3, 5, 7]
[0, 1, 2, 3]

Что мне делать?

Кажется, это проблема с моим знанием grep и map больше, чем Statistics::Basic, поэтому я думаю, вы могли бы помочь, даже если выЯ никогда не использовал этот модуль.

Ответы [ 2 ]

2 голосов
/ 09 марта 2011
->set_filter( sub { @_[ grep $filter[$_], 0..$#_ ] } )
1 голос
/ 09 марта 2011

Попробуйте этот фильтр:

$compV1->set_filter(sub { map { $filter[$_] ? $_[$_] : () } 0..$#_ });

Ваша вторая попытка близка, но вы возвращаете индексы вместо реальных значений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...