4

私はここで何が間違っているのですか?「範囲外の添え字」とはどういう意味ですか?

Rでのデータマイニングに関するRevolutionRオンラインセミナーから以下のコード(最初のブロック)の抜粋を入手しました。これを実行したRFモデルに組み込んでみようとしていますが、変数の順序を理解できません。変数の重要性をプロットしたいだけです。

コンテキストを与えるために、以下に必要なものをもう少し含めました。しかし、実際に私がエラーにしているのは、コードの3行目です。2番目のコードブロックは、作業中のデータに適用されたときに発生するエラーです。誰かが私がこれを理解するのを手伝ってもらえますか?

    -------------------------------------------------------------------------
# List the importance of the variables.
rn <- round(importance(model.rf), 2)
rn[order(rn[,3], decreasing=TRUE),]
##@# of 
# Plot variable importance
varImpPlot(model.rf, main="",col="dark blue")
title(main="Variable Importance Random Forest weather.csv",
            sub=paste(format(Sys.time(), "%Y-%b-%d %H:%M:%S"), Sys.info()["user"])) 
#--------------------------------------------------------------------------

私のエラー:

> rn[order(rn[,2], decreasing=TRUE),]
Error in order(rn[, 2], decreasing = TRUE) : subscript out of bounds
4

1 に答える 1

6

混乱を理解していると思います。入力するとncol(rn)、rn が 2 つの列を持っていることがわかります。期待するように 3 つではありません。画面に表示されている最初の「列」は、実際には列ではなく、オブジェクト rnの行名です。rownames(rn)これを確認するために入力します。したがって、並べ替えたい rn の最後の列は、rn[,3] ではなく rn[,2] です。R に列 3 で並べ替えるように要求したが、rn には列 3 がないため、「範囲外の添え字」メッセージが表示されます。

これは、「重要な」オブジェクトが実際に何であるかに興味がある人のための私の簡単な探偵トレイルです...ライブラリ(randomForest)をインストールし、オンラインのドキュメントから例を実行しました:

set.seed(4543)
data(mtcars)
mtcars.rf <- randomForest(mpg ~ ., data=mtcars, ntree=1000, 
             keep.forest=FALSE, importance=TRUE)
importance(mtcars.rf)

この場合の「重要度」オブジェクトは次のようになります (スペースを節約するために最初の数行のみ)。

       %IncMSE IncNodePurity
cyl  17.058932     181.70840
disp 19.203139     242.86776
hp   17.708221     191.15919
...

明らかに ncol(importance(mtcars.rf)) は 2 であり、行名が混乱を招く可能性があります :)

于 2012-06-06T06:23:33.340 に答える