Registro de alterações do Mining R 4.0.0 para Nuggets of Gold: nº 1 stopifnot ()

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br


[Esteartigofoipublicadopelaprimeiravezem[Thisarticlewasfirstpublishedon R – rud.is, e gentilmente contribuiu para os R-blogueiros]. (Você pode relatar um problema sobre o conteúdo desta página aqui)


Deseja compartilhar seu conteúdo com R-blogueiros? clique aqui se você tiver um blog ou aqui se não tiver.

O R 4.0.0 está fora do ar há algum tempo, agora e – além de um caso em que merge() era mais lento que a sujeira – era realmente estável para pelo menos eu (uso diariamente no macOS, Linux e Windows). Claro, ele veio com alguns recursos / atualizações interessantes, mas comecei a examinar quais outras pepitas úteis poderiam estar no changelog e decidi postá-las no blog quando as encontrar.

A pepita de hoje é a venerável stopifnot() função que foi significativamente aprimorada por este PR por Neil Fultz.

Antes da R 4.0.0, se você queria usar stopifnot() para executar alguma validação de entrada (também conhecida como neste caso – [assertions]) (https://en.wikipedia.org/wiki/Assertion_ (software_development)), você faria algo assim (estou emprestando o exemplo de Neil):

some_ƒ  0),
    (alpha  0),
    (is.numeric(steptol)),
    (length(steptol) == 1),
    (steptol > 0),
    (is.numeric(interlim)),
    (length(interlim) == 1),
    (interlim > 0)
   )

  message("Do something awesome")

}

Quando executado com entradas aceitáveis, obtemos:

some_ƒ(0.5, 3, 10, 100)
## Do something awesome

Mas, quando executado com algo fora de ordem:

some_ƒ("a", 3, 10, 100)
##  Error in some_ƒ("a", 3, 10, 100) : (is.numeric(alpha)) is not TRUE

recebemos uma mensagem semi-útil, mas um tanto hostil de volta. Claro, ele aponta para a expressão certa, mas devemos ser a linguagem mais amável e amigável de ciência de dados (e de uso geral) que se preocupa um pouco mais com nossos usuários. Para esse fim, muitas pessoas passam a fazer algo assim:

some_ƒ  1)            { stop('Error: alpha is greater than one'); }
  if (!is.numeric(gradtol)) { stop('Error: gradtol should be numeric') }
  if (length(gradtol) != 1) { stop('Error: gradtol should be a single value'); }
  if (gradtol 

o que resulta em:

some_ƒ("a", 3, 10, 100)
##  Error in some_ƒ("a", 3, 10, 100) : Error: alpha should be numeric

(você pode criar mensagens de erro ainda melhores).

Leia Também  Um aplicativo de teste brilhante sobre a campanha de influência russa antes das eleições de 2016 nos EUA

Neal achou que deveria haver uma maneira melhor e criou uma! o ... expressões podem ser nomeado e esses nomes se tornarão a mensagem de erro:

some_ƒ  0),
    'alpha is greater than one'        = (alpha  0),
    'steptol should be numeric'        = (is.numeric(steptol)),
    'steptol should be a single value' = (length(steptol) == 1),
    'steptol should be positive'       = (steptol > 0),
    'iterlim should be numeric'        = (is.numeric(interlim)),
    'iterlim should be a single value' = (length(interlim) == 1),
    'iterlim should be positive'       = (interlim > 0)
   )

  message("Do something awesome")

}

some_ƒ("a", 3, 10, 100)

##  Error in some_ƒ("a", 3, 10, 100) : alpha should be numeric

Muito mais fácil de escrever e muito mais respeitoso com o chamador.

Estatísticas Gratuitas

O CRAN possui ~ 2.600 pacotes que usam stopifnot() no pacote deles /R/ código com as seguintes distribuições selecionadas (os gráficos têm escala log10):

stopifnot use: arquivos usando-o por pacote

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br

Aqui estão os pacotes com 50 ou mais arquivos usando stopifnot():

   pkg              n
           
 1 spatstat       252
 2 pracma         145
 3 QuACN           80
 4 raster          74
 5 spdep           61
 6 lavaan          54
 7 surveillance    53
 8 copula          50

stopifnot chama por arquivo

Aqui estão os pacotes com um ou mais arquivos que possuem 100 ou mais chamadas para stopifnot() neles:

   pkg                 fil                            ct
                                         
 1 ff                  ordermerge.R                  278
 2 OneArmPhaseTwoStudy zzz.R                         142
 3 bit64               integer64.R                   137
 4 updog               rflexdog.R                    124
 5 RNetCDF             RNetCDF.R                     123
 6 Rlda                rlda.R                        105
 7 aster2              transform.R                   105
 8 ads                 fads.R                        104
 9 georob              georob_exported_functions.R   104
10 bit64               highlevel64.R                 101

O_O Isso é um pouco de verificação!

FIN

Se você está trabalhando para mudar para o R 4.0.0 ou mudou, esse e muitos outros novos recursos aguardam! Solte uma nota nos comentários com seu novo recurso favorito (ou, melhor ainda, com um link para uma postagem no blog sobre esse recurso!).

Leia Também  Q é para qplot versus ggplot

Quando eu tiver tempo de descobrir mais algumas pepitas, adicionarei mais postagens a esta série.



Se você chegou até aqui, por que não inscreva-se para atualizações do site? Escolha o seu sabor: e-mail, twitter, RSS ou facebook …



cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br