Bry*_*son 12 packages r package
如果您是一个软件包作者,当我们在大约一周内转移到2.14时,您希望很清楚包结构即将发生的变化.其中一个变化是所有包都需要一个NAMESPACE,如果您没有生成一个包,将为您生成一个(R等同于您在美国的Miranda权利).因此,作为一个好公民,我试图解决这个问题.以下是R-exts的部分:
1.6.5摘要 - 转换现有包
总而言之,将现有包转换为使用命名空间涉及几个简单的步骤:
确定公共定义并将它们放在导出指令中.识别S3样式的方法定义并编写相应的S3method声明.识别依赖项并通过import指令替换任何require调用(并在DESCRIPTION文件的Depends和Imports字段中进行适当的更改).用.onLoad函数或useDynLib指令替换.First.lib函数.
为了确保我在这里做正确的事情,有人可以给出一个简短明确的定义/答案(我是否通过将几个小但相关的问题放在一起来打破规则?).所有答案都应考虑到2.14,请:
谢谢!
我在https://github.com/hadley/devtools/wiki/Namespaces上写了一些关于这个主题的文章.
回答你的问题:
require
应该只用于加载建议的包CRAN包已经有NAMESPACEs,因为它几乎是不朽的.只需选择一些您最喜欢的CRAN包并查看他们的NAMESPACE文件.
它可以像从雪中采取的这种单线(加评论)一样简单:
# Export all names unless they start with a dot
exportPattern("^[^.]")
Run Code Online (Sandbox Code Playgroud)
R CMD check
像往常一样运行,在大多数情况下你应该没事.
在将几个软件包切换到 R 2.14 后,我将用我学到的一些细节来回答我自己的问题。
上面来自手册的描述给人的印象是,您在 Depends: for R 2.13 中拥有的任何内容都应移至 Imports: in R 2.14。你应该这样做,但它们在功能上不是一对一的,我希望从下面的注释中可以清楚地看到。
开始了:
取决于:应该仅用于版本限制,例如 'R >= 2.10' 或 'MASS > 0.1' 并且在 R 2.14 下没有其他限制。
拥有命名空间的部分原因是通知用户可能存在名称冲突和“替换”——换句话说,覆盖使用中的名称。NAMESPACE 文件必须在项目和顺序中匹配导入:描述中的字段。导入的函数名称等将列在 sessionInfo() 中的“通过命名空间加载(且未附加)”下。这些包已安装但未加载(即没有库(某些导入的包))。
命名空间的另一个作用是使函数在“内部”可用于您的包。我的意思是,如果您的包使用导入包中的函数,它将被找到。
但是,当您在检查期间运行 .Rd 文件中的一个示例时,您曾经在 Depends: 下在 R 2.13 但现在在 Imports: 在 R 2.14 下的包将不可用。这是因为检查环境非常类似于在干净的环境中采购脚本(假设您使用的是 R --vanilla 所以 .Rprofiles 等尚未运行)。除非您在示例中添加 library(needed package) 语句,否则即使在 R 2.13 下它也无法在 R 2.14 下工作。因此,即使您的包 Imports: 所需的包,旧示例也不一定运行,因为再次 Imports: 与 Depends: 不太一样(严格来说,它们已附加但未加载)。
如果有任何错误,请纠正我。非常感谢 Hadley Wickham 和其他帮助我的人!
归档时间: |
|
查看次数: |
1722 次 |
最近记录: |