randomForestR包中生长函数源代码

yh2wf1be  于 2023-02-20  发布在  其他
关注(0)|答案(1)|浏览(110)

在R randomForest包的源代码中,我在grow.R中发现了以下代码,UseMethod的用途是什么?为什么函数grow没有函数定义,只有grow.defaultgrow.randomForest有定义?这是否与调用R包中的C函数有关?

grow <- function(x, ...) UseMethod("grow")

grow.default <- function(x, ...)
  stop("grow has not been implemented for this class of object")

grow.randomForest <- function(x, how.many, ...) {
  y <- update(x, ntree=how.many)
  combine(x, y)
}

另外,在randomForest.R文件中,我只找到了下面的代码,也有randomForest.default.R文件,为什么没有像grow函数那样的randomForest.randomForest定义呢?

"randomForest" <-
function(x, ...)
  UseMethod("randomForest")
klr1opcd

klr1opcd1#

UseMethod的用途是什么?为什么function growth没有函数定义,只有grow.defaultgrow.randomForest有定义?
我建议阅读有关S3调度的内容,以了解您看到的模式。Advanced R has a chapter on S3。您还可以在Stack Overflow上看到related questions
这是否与调用R包中的C函数有关?
没有。
为什么没有randomForest.randomForest定义,比如函数增长?
如果你阅读了上面推荐的阅读,这应该是有意义的。S3调度使用function_name.class模式,根据输入的类调用函数的正确版本(method)。你没有给予randomForest对象作为randomForest函数的输入,所以没有定义randomForest.randomForest方法。
grow()确实会在randomForest对象上被调用,因此有了grow.randomForest()方法。据推测,作者希望grow()在不适当的输入上被调用时尽早出错,因此其他类的默认值是立即出错,但他们仍然保持调度灵活性以与其他类一起工作,从而允许对包进行扩展,并且可以很好地与可能具有其自己的grow()实现的其他包一起使用。

相关问题