我正在为R编写一个包,其中导出的函数由高阶函数修饰,该函数添加了错误检查和一些其他样板代码.
但是,因为此代码位于顶层,所以在解析后会对其进行评估.这意味着包文件的加载顺序很重要.
为了给出一个等效但简化的示例,假设我有一个包含两个文件的包(Negate2和Utils),并且我需要首先加载Negate2.R,以便定义函数'isfalse()'而不会抛出错误.
# /Negate2.R
Negate2 <- Negate
# -------------------
# /Utils.R
istrue <- isTRUE
isfalse <- Negate2(istrue)
Run Code Online (Sandbox Code Playgroud)
是否可以构建NAMESPACE,DESCRIPTION(整理)或其他包文件以更改文件的加载顺序?R包结构和CRAN的内部工作对我来说仍然是黑魔法.
使用笨拙的黑客可以解决这个问题,但解决这个问题的重复性最小的方法.包装函数必须是高阶函数,因为它还会更改其输入函数的函数调用语义.这个包很重(大约6000行,100个函数),所以重复会有问题.
正如@Manetheran所指出的,要更改加载顺序,只需更改DESCRIPTION文件中文件名的顺序即可.
# /DESCRIPTION
Collate:
'Negate2.R'
'Utils.R'
Run Code Online (Sandbox Code Playgroud)
该文件的Collate:
字段DESCRIPTION
允许您更改构建包时加载的订单文件.
我在阅读时偶然发现了这个问题的答案Roxygen
.如果您一直使用Roxygen记录您的函数,它可以尝试R
在Collate:
字段中智能地排序源文件(基于S4类和方法定义的位置).这可以通过添加来完成"collate"
到roclets
的参数roxygenize
.或者,如果您正在开发RStudio
中,可以在Build-> Configure Build Tools-> Configure ...("使用Roxygen生成文档"旁边的按钮)下查看一个简单的框.
归档时间: |
|
查看次数: |
1510 次 |
最近记录: |