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.

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top