首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >更改R包中文件的加载顺序

更改R包中文件的加载顺序
EN

Stack Overflow用户
提问于 2013-08-26 09:35:55
回答 2查看 2.6K关注 0票数 10

我正在为R编写一个包,其中导出的函数由一个高阶函数来修饰,该函数添加了错误检查和一些其他样板代码。

但是,由于此代码位于顶层,因此在解析后将对其进行评估。这意味着包文件的加载顺序很重要。

为了给出一个等价但简单的例子,假设我有一个包含两个文件(Negate2和Utils)的包,并且我要求首先加载Negate2.R,以便定义函数isfalse(),而不抛出错误。

代码语言:javascript
复制
# /Negate2.R
Negate2 <- Negate

# -------------------

# /Utils.R
istrue <- isTRUE
isfalse <- Negate2(istrue)

是否可以构造名称空间、描述(排序规则)或其他包文件以更改文件的加载顺序?R封装结构和CRAN的内部工作对我来说仍然是黑魔法。

用笨拙的方法解决这个问题是可能的,但是解决这个问题的重复方式最少。包装器函数必须是高阶函数,因为它还更改了其输入函数的函数调用语义。这个包代码很重(大约6000行,100个函数),所以重复将是be...problematic。

解决方案

正如@Manetheran所指出的,要更改加载顺序,只需更改描述文件中文件名的顺序。

代码语言:javascript
复制
# /DESCRIPTION
Collate:
    'Negate2.R'
    'Utils.R'
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-27 06:30:56

Collate:文件的DESCRIPTION字段允许您更改生成包时加载的订单文件。

昨天我在Roxygen上阅读时偶然发现了这个问题的答案。如果您已经用you记录了您的函数,它可以尝试在Collate:字段中智能地排序您的Collate:源文件(基于S4类和方法定义的位置)。这可以通过向"collate"roclets参数中添加roxygenize来实现。或者,如果您正在RStudio中开发,那么可以在Build->Configure >Configure.下检查一个简单的框。(按钮旁边是“用RO2生成文档”)。

票数 10
EN

Stack Overflow用户

发布于 2017-04-01 20:20:13

R按字母顺序加载文件。若要更改顺序,可以从描述文件中使用排序规则字段。

roxygen2提供了一种明确的方式,说明必须先加载一个文件,然后再加载另一个文件:@include。@include标记提供了一个以空格分隔的文件名列表,这些文件名应该在当前文件之前加载:

代码语言:javascript
复制
#' @include class-a.r
setClass("B", contains = "A")

如果包中存在@include标记,roxygen2将在说明中设置排序规则字段。

为了使更改生效,您需要运行roxygen2文档的生成。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18441038

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档