在R randomForest
包的源代码中,我在grow.R
中发现了以下代码,UseMethod
的用途是什么?为什么函数grow
没有函数定义,只有grow.default
和grow.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")
1条答案
按热度按时间klr1opcd1#
UseMethod的用途是什么?为什么function growth没有函数定义,只有
grow.default
和grow.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()
实现的其他包一起使用。