我正在为 R 编写一个包,其中导出的函数由一个添加错误检查和其他样板代码的高阶函数修饰。
但是,由于此代码位于顶层,因此在解析后对其进行评估。这意味着包文件的加载顺序很重要。
举一个等效但简化的示例,假设我有一个包含两个文件(Negate2 和 Utils)的包,并且我需要首先加载 Negate2.R 才能定义函数“isfalse( )”而不会引发错误。
# /Negate2.R
Negate2 <- Negate
# -------------------
# /Utils.R
istrue <- isTRUE
isfalse <- Negate2(istrue)
是否可以构造 NAMESPACE、DESCRIPTION(整理)或其他包文件以更改文件的加载顺序?R 包结构和 CRAN 的内部工作对我来说仍然是黑魔法。
可以使用笨拙的技巧来解决此问题,但这是解决此问题的重复性最少的方法。包装函数必须是高阶函数,因为它还改变了其输入函数的函数调用语义。该包代码繁重(约 6000 行,100 个函数),因此重复将是……有问题的。
解决方案
正如@Manetheran 指出的那样,要更改加载顺序,您只需更改DESCRIPTION 文件中文件名的顺序。
# /DESCRIPTION
Collate:
'Negate2.R'
'Utils.R'