我在这里做错了什么? “下标越界”是什么意思?

我从关于 R 中数据挖掘的 Revolution R 在线研讨会中获得了以下代码(第一块)摘录。我试图将其合并到我运行的 RF 模型中,但无法通过我认为的变量排序。我只想绘制变量的重要性。

我在下面包含了更多然后需要的内容来提供上下文。但我真正错误的是第三行代码。第二个代码块是我在应用到我正在处理的数据时遇到的错误。谁能帮我解决这个问题?

    -------------------------------------------------------------------------
# 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

最佳答案

想我明白了困惑。我敢打赌,如果您输入 ncol(rn),您会看到 rn 有 2 列,而不是您预期的 3 列。您在屏幕上看到的第一个“列”并不是真正的列——它只是对象 rn 的 行名称 。输入 rownames(rn) 以确认这一点。因此,您要排序的 rn 的最后一列是 rn[,2] 而不是 rn[,3]。出现“下标越界”消息是因为您要求 R 按第 3 列排序,但 rn 没有第 3 列。

这是我对“重要性”对象实际上是什么感兴趣的任何人的简短侦探线索......我安装了 library(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,行名很可能是导致混淆的东西:)

关于r - 在 R 中绘制随机森林模型的重要变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10906841/

10-11 03:57