Как “0” результат readdir () не ложь в некоторое время условии?

Одной из возможностей dplyr может быть:

df %>%
 group_by(return_rleid = {return_rleid = rle(return > 3); rep(seq_along(return_rleid$lengths), return_rleid$lengths)}) %>%
 mutate(Consec_days = ifelse(return <= 3, NA, seq_along(return_rleid))) %>%
 ungroup() %>% 
 select(-return_rleid)

   date       return Consec_days
   <date>      <dbl>       <int>
 1 2019-02-20   1.00          NA
 2 2019-02-21   2.50          NA
 3 2019-02-22   2.00          NA
 4 2019-02-23   3.00          NA
 5 2019-02-24   5.00           1
 6 2019-02-25   6.50           2
 7 2019-02-26   1.00          NA
 8 2019-02-27   9.00           1
 9 2019-02-28   3.00          NA
10 2019-03-01   2.00          NA

Сначала выполняется группировка по идентификатору группы длин серий. Во-вторых, если «return» больше 3, он создает последовательность вокруг идентификатора группы длин серий, в противном случае присваивает. Наконец, он разгруппируется и удаляет избыточную переменную.

Или то же самое, но генерация последовательности по gl():

df %>%
 group_by(return_rleid = {return_rleid = rle(return > 3); rep(seq_along(return_rleid$lengths), return_rleid$lengths)}) %>%
 mutate(Consec_days = ifelse(return <= 3, NA, gl(length(return_rleid), 1))) %>%
 ungroup() %>% 
 select(-return_rleid)
6
задан Community 23 May 2017 в 12:13
поделиться

1 ответ

Это волшебство. В частности, во время магии (описано в perlsyn , perlop и, возможно, в других местах, которые я не помню). Perl позволяет использовать некоторые сокращенные обозначения. Если вы хотите увидеть, что Perl делает за вашей спиной, вы можете использовать B :: Deparse . Вот файл, в котором используется сокращенный цикл:

#!/usr/bin/perl

use strict;
use warnings;

opendir my $dir, "/tmp" or die "$!";

while (my $file = readdir($dir)) {
    print "$file\n";
}

Если вы запустите perl -MO = Deparse filename.pl , вы получите код, который видит Perl:

use warnings;
use strict 'refs';
die "$!" unless opendir my $dir, '/tmp';
while (defined(my $file = readdir $dir)) {
    do {
        print "$file\n"
    };
}
filename.pl syntax OK
12
ответ дан 9 December 2019 в 20:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: