Equivalente a "arremesso" em r
-
05-07-2019 - |
Pergunta
Como alguém "joga" um erro em r? Eu tenho uma função que pega um quadro de dados e alguns nomes de colunas e faz coisas com eles. Se as colunas não existirem, quero que a função pare e interrompa todas as funções, dependendo dela.
Eu olhei para recover
e browse
e traceback
Mas, bem, eles pareciam estar próximos, mas não o que estou procurando.
Solução
Ver help(tryCatch)
:
As condições são sinalizadas por '
signalCondition
'. Além disso, o
'stop
' e 'warning
'As funções foram modificadas para aceitar também
argumentos de condição.
e mais tarde em 'Veja também':
'
stop
' e 'warning
'Condições de sinal e'try
'é essencialmente uma versão simplificada de'tryCatch
'.
Então você provavelmente quer stop
.
Outras dicas
Exemplo simples:
f <- function(a, b){
if (a == 0){
stop("error message")
}
}
Além das funções básicas que Dirk menciona:
o Pacote r.oo Possui funcionalidade adicional de manuseio de exceção, incluindo uma função de arremesso () que é muito útil. Você pode capturar exceções com as funções usuais de tentativa ou trycatch:
> try(throw("Division by zero.")); print("It's ok!");
Error: [2009-10-22 10:24:07] Exception: Division by zero.
[1] "It's ok!"
Você pode ler mais sobre isso aqui: http://www1.maths.lth.se/help/r/r.oo/
Na verdade, a função stopifnot
é muito conveniente para implementar verificações de sanidade em seu código. Ele assume várias expressões lógicas e retorna um erro se algum deles é avaliado como falso.
Exemplo: Para verificar se a coluna 'C' existe no DataFrame 'DF':
df <- data.frame(a = numeric(), b = numeric())
stopifnot(!is.null(df$c))
Isso lançará o seguinte erro:
Error: !is.null(df$c) is not TRUE
Você pode verificar se a coluna existe e fazer o que você quiser.
Suponha que um data.frame
nomeado df1
e verificando se coluna col1
existe:
if(! any(grepl('^col1$',colnames(df1)))) stop("nonexistent column")
ou
if(! any(grepl('^col1$',colnames(df1)))) return(-1)
Por exemplo