0

我有一些代码要在用户加载我的包时运行。该代码包括创建引用类(父类)和source存储在inst. 这是一个玩具版本:

Parent <- setRefClass("Parent",
    methods = list(
        initialize = function() { }
    )
)

.onLoad <- function(libname, pkgname){
    temp <- new.env()
    file <- system.file("example.R", package = "examplerefclass")
    sys.source(file, envir = temp)
    objects <- ls(temp)
    print(objects)
}

example.R文件定义了一个参考类。

library(methods)
Child <- setRefClass("Child", contains = "Parent")

我不得不打电话library(methods),因为运行methods时没有定义包.onLoad。所以,这行得通,但是当我运行时出现错误,R CMD check我不知道如何避免它。

Error : .onLoad failed in loadNamespace() for 'examplerefclass', details:
  call: initialize(value, ...)
  error: attempt to apply non-function

错误是指在 中initialize定义的函数Parent。不知何故,该Child课程在此过程中没有看到它R CMD check,但它在交互模式下工作。

我知道我正在做的事情是非常规的,但我没有看到任何其他方式来满足我的设计要求。出于多种原因,example.R必须将其存储在 中inst,并且我需要检查objects其中定义的内容,example.R而无需在当前环境中对其进行采购(如果定义了正确的对象,我将继续进行采购example.R,但那是另一回事了)。

对于如何解决这个问题,有任何的建议吗?

我在 git repo 中设置了玩具示例以便于测试:https ://github.com/nachocab/examplerefclass

4

0 回答 0