kmeans を使用してビンの幅を決定し、連続測定値 (予測確率) を整数 (3 つのビンのうちの 1 つ) に変換する関数を作成しています。私のアルゴリズムがセット全体に対して同じ確率を (正しく) 予測できるエッジ ケースに遭遇しました。その状況を処理したいと考えています。rattle
パッケージのbinning()
関数を次のように使用しています。
btsKmeansBin <- function(x, k = 3, default = c(0, 0.3, 0.5, 1)) {
result <- binning(x, bins = k, method = "kmeans", ordered = T)
bins <- attr(result, "breaks")
attr(bins, "names") <- NULL
bins <- bins[order(bins)]
bins[1] <- 0
bins[length(bins)] <- 1
return(bins)
}
でこの関数を実行すると、ステップでx <- c(.5,.5,.5,.5,.5,.5)
エラーが発生します。これは、 が NULL になり、ベクトルではないためです。order(bins)
bins
明らかに、x
明確な値が 1 つしかない場合、kmeans は機能しません。default
この場合、ビン分割を返したいと思います。これが発生すると、binning
「警告: 変数は考慮されません」というメッセージが表示されます。したがって、この警告を処理するために使用したいのですが、次のコードtryCatch
で行を囲むresult <- ...
と、期待どおりに機能しません。
...
tryCatch({
result <- binning(x, bins = k, method = "kmeans", ordered = T)
}, warning = function(w) {
warn(sprintf("%s. Using default values", w))
return(default)
}, error = function(e) {
stop(e)
})
...
を使用していないかのように警告が出力され、コードはステートメントをtryCatch
超えて進行し、エラーが再びスローされます。たくさんのバリエーションを試しましたが、役に立ちませんでした。ここで何が欠けていますか??return
order