典型的なRエラーメッセージにこだわると、それらは非常に便利です。
それにもかかわらず、私はしばしばR自身のエラーメッセージが私が期待するほど有益ではないことに気付くので、私は通常、ある種のカスタマイズされたエラーメッセージを書くことになります。
ここで、特定のエラーへの追加情報だけでなく、一意のエラーコードの割り当てに関して、これに対して体系的なアプローチ(または推奨されるベストプラクティスアプローチ)があるかどうか疑問に思います。
エラーごとに追加情報を保存および取得できる、エラー用のある種のハッシュテーブルソリューションを構築したいと思います。ある種の「軽い」DBソリューション(SQLiteなど)を使用しますか、それともどこかに保存され()、必要に応じて取得される単純なオブジェクトdata.frame
またはオブジェクトを介してこれを解決しますか?list
.rdata
宿題
正直なところ、私はまだそれほど多くの研究をしていません。ここに少なくとも何かがありますが;-)
パッケージレポーター
レポーターパッケージについて知りました。詳細を確認します。誰かがそのパッケージまたは同様のパッケージの経験をまだ持っていますか?
私自身のアプローチの概要(一部疑似コード)
myFoo <- function(x, ...) {
tryCatch(
x * 100,
error=function(e) {
record <- retrieveErrorRecord(e) # Does not exist yet
# 'record' would be some sort of list or Ref Class Object
if (!length(record)) {
uid <- generateUid(e) # Does not exist yet
msg <- paste(
"expecting arg 'x' to be of class 'numeric' (was '",
class(x), "')", sep="")
insertErrorRecord( # Does not exist yet
list(
uid=uid,
message=msg,
original=e
)
)
record <- retrieveErrorRecord(e)
}
msg <- c(
"myFoo/error:\n",
paste("* Code: ", record$uid, "\n", sep=""),
paste("* Message: ", record$message, "\n", sep=""),
paste("* Original: ", record$original, "\n", sep="")
)
stop(msg)
}
)
}
メッセージは次のようになります
require("digest")
x <- "abc"
e <- simpleError("test error")
record <- list(
uid=digest(e),
message=paste("expecting arg 'x' to be of class 'numeric' (was '",
class(x), "')", sep=""),
original=e
)
msg <- c(
"myFoo/error:\n",
paste("* Code: ", record$uid, "\n", sep=""),
paste("* Message: ", record$message, "\n", sep=""),
paste("* Original: ", record$original, "\n", sep="")
)
> stop(msg)
Error: myFoo/error:
* Code: e78e73054b93d2bf682df32845cd064d
* Message: expecting arg 'x' to be of class 'numeric' (was 'character')
* Original: Error: test error