式を評価する関数を作成しようとしていますが、その式の結果が「有限」でない場合 (is.finite で定義)、デフォルト値を返します。エラーがスローされた場合でも、関数はデフォルト値を返す必要があります。関数もベクトル化する必要があります。
これは非常に簡単なはずですが、R のエラー トラップ機能を完全には理解していません。これらのテストケースを満たすために、誰かがこの機能を改善/簡素化するのを助けることができますか?
これが私が持っている機能の始まりです。うまくいくとしても、それはかなり醜いです。
getOrElse <- function (expr, default = 0) {
# protect against any errors
val <- tryCatch (expr, error = function (e) {})
# replace any non-finite values
val [!is.finite(val)] <- default
# this is really ugly
if (length(val) > 1 && !is.finite(val)) val <- default
return (val)
}
そして、ここに「テストケース」があります...
getOrElse (sqrt(4), default = 10) == 2 # WORKS
getOrElse (stop ("ignore"), default = 10) == 10 # BROKEN
getOrElse (sqrt(c(4, 16, NA, NaN)), default = 0) == c(2, 4, 0, 0) # BROKEN
getOrElse (sqrt(c(4, 16)), default = 0) == c(2, 4) # WORKS
getOrElse (c(NA, NA), default = 10) == c(10, 10) # WORKS
どうもありがとう