gpt4 book ai didi

r - 是什么导致 randomForest.partialPlot 函数出现这种奇怪的行为?

转载 作者:行者123 更新时间:2023-12-02 04:17:33 26 4
gpt4 key购买 nike

我在 R 2.15.2 中使用randomForest 包(v. 4.6-7)。我找不到 partialPlot 函数的源代码,并且试图弄清楚它到底做了什么(帮助文件似乎不完整。)它应该采用变量 的名称x.var 作为参数:

library(randomForest)
data(iris)

rf <- randomForest(Species ~., data=iris)
x1 <- "Sepal.Length"
partialPlot(x=rf, pred.data=iris, x.var=x1)
# Error in `[.data.frame`(pred.data, , xname) : undefined columns selected

partialPlot(x=rf, pred.data=iris, x.var=as.character(x1))
# works!

typeof(x1)
# [1] "character"

x1 == as.character(x1)
# TRUE

# Now if I try to wrap it in a function...
f <- function(w){
partialPlot(x=rf, pred.data=iris, x.var=as.character(w))
}

f(x1)
# Error in as.character(w) : 'w' is missing

问题:

1) 在哪里可以找到 partialPlot 的源代码?

2) 如何编写一个以字符串 x1 作为参数的函数,其中 x1 == as.character(x1),但该函数会抛出异常当 as.character 未应用于 x1 时出现错误?

3)为什么当我将它包装在函数中时会失败? partialPlot 是否以某种方式扰乱了环境?

也非常欢迎提示/尝试可能有助于我将来解决此类问题的方法!

最佳答案

通过输入找到 partialPlot() 的源代码

randomForest:::partialPlot.randomForest 

进入控制台。我通过第一次运行发现了这一点

methods(partialPlot)

因为输入 partialPlot 仅告诉我它使用了一种方法。从 methods 调用中我们看到有一个方法,它旁边的星号告诉我们它是一个非导出函数。要查看非导出函数的源代码,我们使用三冒号运算符 :::。就这样吧

package:::generic.method

其中package是包,generic是泛型函数(这里是partialPlot),method是方法(这里是 randomForest 方法)。

现在,对于其他问题,可以使用 do.call() 编写函数,并且可以在不使用包装器的情况下传递 w

f <- function(w) {
do.call("partialPlot", list(x = rf, pred.data = iris, x.var = w))
}

f(x1)

这适用于我的机器。与其说是环境,不如说是评估。许多绘图函数使用一些非标准评估,大多数情况下可以使用此 do.call() 构造来处理。

但请注意,在函数之外,您还可以在 x1 上使用 eval()

partialPlot(x = rf, pred.data = iris, x.var = eval(x1))

我真的没有理由检查函数内部是否存在 as.character() 。如果您可以发表评论,如果您需要更多信息,我们可以从那里开始。我对这个包还不够熟悉,还没有进一步了解。

关于r - 是什么导致 randomForest.partialPlot 函数出现这种奇怪的行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32750984/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com