Existe uma maneira de controlar a mensagem de erro relatada se stopifnot () parar?
Nick
12
@Nick, não. Use stopifnot()para teste de validade, para testar se o código está fazendo o que deveria estar fazendo, mas if (blahdiblah) stop("error message")para teste de entrada, para testar se a entrada para o programa é válida. Apenas o último deve acontecer durante o uso normal.
Harlan
6
Veja também o novo assertthatpacote do Hadley , que dá respostas melhores do stopifnotque: github.com/hadley/assertthat
Harlan
12
@Usuario:
Você pode controlar sua mensagem de erro se escrever uma função com um nome descritivo para testar a condição que lançará um erro em seu programa. Aqui está um exemplo:
Você pode simplesmente colocar a definição da função dentro stopifnot()também.
naught101 de
2
naught101, o objetivo de ter o teste em uma função nomeada é obter o nome do teste impresso na mensagem de erro
Mateus
4
Isso pode ser feito com o stopcomando. Este comando interromperá a execução de uma função e imprimirá a mensagem de erro. Por exemplo, podemos testar se a variável somethingé FALSE:
if(something ==FALSE){
stop("error message to print")}
Da mesma forma, o warningcomando imprimirá um aviso (mas continuará executando o código).
if(something ==FALSE){
warning("error message to print")}
Ambos são fornecidos pela base R e não requerem pacotes para serem executados ou incluem por escrito suas próprias funções. Eu prefiro essa abordagem para escrever código com menos dependências e essa sintaxe é amplamente usada no desenvolvimento de pacotes. No entanto, funcionalidade semelhante é suportada pelo pacote "assertthat" com a assert_thatfunção que foi lançada recentemente como parte do "tidyverse" de Hadley.
stopifnot()
para teste de validade, para testar se o código está fazendo o que deveria estar fazendo, masif (blahdiblah) stop("error message")
para teste de entrada, para testar se a entrada para o programa é válida. Apenas o último deve acontecer durante o uso normal.assertthat
pacote do Hadley , que dá respostas melhores dostopifnot
que: github.com/hadley/assertthat@Usuario:
Você pode controlar sua mensagem de erro se escrever uma função com um nome descritivo para testar a condição que lançará um erro em seu programa. Aqui está um exemplo:
Isso imprimirá os números de 1 a 8 e, em seguida, imprimirá uma mensagem que diz
Seria bom se o "i" entre parênteses fosse substituído pelo valor que falhou no teste, mas você recebe o que paga.
Se você precisar de algo mais sofisticado do que isso, dê uma olhada em Runit e teste-o como sugeriu Harlan.
fonte
stopifnot()
também.Isso pode ser feito com o
stop
comando. Este comando interromperá a execução de uma função e imprimirá a mensagem de erro. Por exemplo, podemos testar se a variávelsomething
éFALSE
:Da mesma forma, o
warning
comando imprimirá um aviso (mas continuará executando o código).Ambos são fornecidos pela base R e não requerem pacotes para serem executados ou incluem por escrito suas próprias funções. Eu prefiro essa abordagem para escrever código com menos dependências e essa sintaxe é amplamente usada no desenvolvimento de pacotes. No entanto, funcionalidade semelhante é suportada pelo pacote "assertthat" com a
assert_that
função que foi lançada recentemente como parte do "tidyverse" de Hadley.fonte