What causes this weird behaviour in the randomForest.partialPlot function?

后端 未结 1 930
粉色の甜心
粉色の甜心 2021-01-16 03:03

I am using the randomForest package (v. 4.6-7) in R 2.15.2. I cannot find the source code for the partialPlot function and am trying to figure out

相关标签:
1条回答
  • 2021-01-16 03:42

    The source code for partialPlot() is found by entering

    randomForest:::partialPlot.randomForest 
    

    into the console. I found this by first running

    methods(partialPlot)
    

    because entering partialPlot only tells me that it uses a method. From the methods call we see that there is one method, and the asterisk next to it tells us that it is a non-exported function. To view the source code of a non-exported function, we use the triple-colon operator :::. So it goes

    package:::generic.method
    

    Where package is the package, generic is the generic function (here it's partialPlot), and method is the method (here it's the randomForest method).

    Now, as for the other questions, the function can be written with do.call() and you can pass w without a wrapper.

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

    This works on my machine. It's not so much environments as it is evaluation. Many plotting functions use some non-standard evaluation, which can be handled most of the time with this do.call() construct.

    But note that outside the function you can also use eval() on x1.

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

    I don't really see a reason to check for the presence of as.character() inside the function. If you can leave a comment we can go from there if you need more info. I'm not familiar enough with this package yet to go any further.

    0 讨论(0)
提交回复
热议问题