今すぐ stop()

ディフェンシブRプログラミング

Dr. Colin Gillespie

Jumping Rivers

標識を見た

ときどき壊れているだけのことがあります

  • エラーを発生させる必要があります

例:

1 + "stuff"
Error in 1 + "stuff": non-numeric argument to binary operator
ディフェンシブRプログラミング

今すぐ止めて、ありがとう

エラーを送出するには stop() を使います

stop("A Euro 1996 error has occurred")
# Error: A Euro 1996 error has occurred
conf_int <- function(mean, std_dev) {
   if(std_dev <= 0) 
       stop("Standard deviation must be positive")

   c(mean - 1.96 * std_dev, mean - 1.96 * std_dev)
}
ディフェンシブRプログラミング

捕まえられるうちに捕まえる

  • エラーは抑止(無視)できません
    • エラーとは、R が続行できない状態です
    • その代わり、エラーを捕捉します

ディフェンシブRプログラミング

try() 関数

try()suppress() に少し似ています

res <- try("Scotland" + "World cup", silent = TRUE)

実行を試み、失敗したら先へ進みます

ディフェンシブRプログラミング

try() の定石

res <- try("Scotland" + "World cup", silent = TRUE)
res
[1] 'Error in "Scotland" + "World cup": non-numeric argument to binary operator'
attr(,"class")
[1] "try-error"
attr(,"condition")
<simpleError in "Scotland" + "World cup": 
                            non-numeric argument to binary operator>
ディフェンシブRプログラミング

try() の定石

result <- try("Scotland" + "World cup", silent = TRUE)
class(result)
[1] "try-error"
if(class(result) == "try-error")
  ## 何か有用な処理を行う
ディフェンシブRプログラミング

Let's practice

ディフェンシブRプログラミング

Preparing Video For Download...