0

我正在尝试在首次加载包时初始化和存储一些包特定信息,并且在如何在 R 中存储一些包特定信息如何在加载时运行一些代码中找到了很多关于如何执行此操作的好信息包。但是,我想在包加载期间调用的一个函数验证包中定义的几个类的继承关系,但这会返回与我预期不同的结果。我可以想出不同的方法来解决这个问题,但我试图了解我做错了什么,并希望有人可以向我解释。

下面是重现问题的包源代码的最小示例。

# package reference classes
setClass("myclass", representation(value = "numeric"), 
                    prototype = prototype(value = 42))
setClass("myderivedclass", contains = "myclass")

# package on load function
.onLoad <- function(lib, pkg){  
    if (!extends("myderivedclass", "myclass")) {
        warning("something's not right")
    }
}

现在在 package 期间.onLoadextends("myderivedclass", "myclass")评估为FALSE(触发警告),但当然,一旦加载包,它评估为TRUE,这是我所期望的。在工作期间使用任一类初始化对象都.onLoad很好,因此并不是尚未加载类定义。

非常感谢您在我应该如何进行这种测试.onLoad或我可能对这里的继承有什么误解的任何帮助。

会话信息:

> sessionInfo()
R version 3.1.0 (2014-04-10)
Platform: x86_64-apple-darwin10.8.0 (64-bit)
4

1 回答 1

0

为了完整起见,这就是它的工作方式,setLoadAction而不是.onLoad

setLoadActions(function(ns) {
    if (!extends("myderivedclass", "myclass")) {
        warning("something's not right")
    } else {
        message("everything all right")
    }
}) 

这样,在包加载期间extends("myderivedclass", "myclass")正确评估。TRUE

于 2014-04-26T16:09:04.807 回答