我有一些代码要在用户加载我的包时运行。该代码包括创建引用类(父类)和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