デバッグ

traceback

エラーの発生した一連の呼び出しを表示する。

x <- difftime("2016-04-04",2015/10/16)
## Error in as.POSIXct.numeric(time2): 'origin' must be supplied
traceback()
4: stop("'origin' must be supplied")
3: as.POSIXct.numeric(time2)
2: as.POSIXct(time2)
1: difftime("2016-04-04", 2015/10/16)

browser

browser()が入力されているところで一時停止する。
次のステップに行く場合は、nを入力する。qで終了

# 偏差の2乗和を求める関数
SS <- function(mu, x) {
  d <- x -mu
  d2 <- d^2
  browser()
  ss <- sum(d2)
  ss
}

set.seed(100)
x <- rnorm(100)
SS(2, x)
## Called from: SS(2, x)
##  <text>#6 の debug: ss <- sum(d2)
##  <text>#7 の debug: ss
## [1] 501.9789
Called from: SS(2, x)
Browse[1]> ls()  # 変数の一覧を表示
[1] "d"  "d2" "mu" "x"
Browse[1]> print(mu)  # muを表示
[1] 2
Browse[1]> mean(x)  #平均を算出
[1] 0.002912563
Browse[1]> n # 次のステップ
debug at #5: ss <- sum(d2)  #合計を算出
Browse[2]> c
[1] 501.9789

引用:An Introduction to the interative Debugging Tools in R: Roger D.Peng August 28, 2002

recover

関数の呼び出しを直接見れるようにする。

options(error = recover/)

stop, warning, message

stop:エラーが発生した場合に、メッセージなどを表示して停止する。
warning:ユーザーに警告メッセージを表示する。
message:メッセージを表示する

# stop
fileName <- "hoge.csv"
file_chk <- if (file.exists(fileName)) {
  read.csv(fileName)
} else {
  stop("該当ファイルが存在しないので中止します", fileName)
}
## Error in eval(expr, envir, enclos): 該当ファイルが存在しないので中止しますhoge.csv
# warning
fileName <- "hoge.csv"
file_chk <- if (file.exists(fileName)) {
  read.csv(fileName)
} else {
  warning("該当ファイルが存在しません", fileName)
}
# message
fileName <- "hoge.csv"
file_chk <- if (file.exists(fileName)) {
  read.csv(fileName)
} else {
  message("該当のファイルが存在しません", fileName)
}
## 該当のファイルが存在しませんhoge.csv

tryCatch

trycatch:例外処理において、エラーによって実行を分岐することができる。

# 書式
result = tryCatch(
  {expr},
  warning = function(w) {warning-handler-code},
  error = function(e) {error-handler-code},
  finally = {cleanup-code}
)

引用:stackoverflow:How to write trycatch in R

try

tyr:第1引数は評価したい式、第2引数はエラー表示(既定ではconsoleに出力)

x <- try({open("hoge")}, silent = FALSE)
x
## [1] "Error in UseMethod(\"open\") : \n   'open' をクラス \"character\" のオブジェクトに適用できるようなメソッドがありません \n"
## attr(,"class")
## [1] "try-error"
## attr(,"condition")
## <simpleError in UseMethod("open"):  'open' をクラス "character" のオブジェクトに適用できるようなメソッドがありません >
最終更新日:2016/04/27

copyrigth © 2016 r-beginners.com All rigths reserved.

PAGE TOP ▲