我创建将使用的R包的单一功能的plyr.根据这个roxygen2小插图:
如果您只使用其他软件包中的一些函数,建议的选项是在DESCRIPTION文件的Imports:字段中记下软件包名称,并使用::显式调用函数,例如pkg :: fun() .
听起来不错.我使用plyr::ldply()-全呼叫与::-所以我列出plyr在Imports:我的DESCRIPTION文件.但是,当我使用时,devtools::check()我得到这个:
* checking dependencies in R code ... NOTE
All declared Imports should be used:
‘plyr’
All declared Imports should be used.
Run Code Online (Sandbox Code Playgroud)
为什么我会收到这个说明?
我可以通过添加@importFrom dplyr ldply正在使用的文件来避免该注释plyr,但随后我结束但ldply在我的包命名空间中.我不想要,也不应该因为我使用plyr::ldply()单一时间使用该功能.
任何指针将不胜感激!
(这个问题可能有用.)
Tho*_*mas 11
如果ldply()对包的功能很重要,那么您确实需要它在包命名空间中.这就是名称空间导入的重点.您需要的函数应该在包命名空间中,因为这是R首先查找函数定义的地方,然后遍历基本命名空间和附加的包.这意味着无论其他软件包是加载还是卸载,附加或未附加,您的软件包始终都可以访问该函数.在这种情况下,使用:
@importFrom plyr ldply
Run Code Online (Sandbox Code Playgroud)
你可以在ldply()没有plyr::前缀的情况下引用,就像它是你的包中的另一个函数一样.
如果ldply()不是那么重要 - 也许它只在一个不常用的函数中被调用一次 - 那么,Writing R Extensions 1.5.1给出了以下建议:
如果一个包只需要来自另一个包的几个对象,它可以在代码中使用完全限定的变量引用而不是正式的导入.表格
f中包含函数的完全限定引用.这比正式导入效率略低,并且还失去了在文件中记录所有依赖项的优点(但它们仍然需要记录在文件中).如果没有加载包,则评估将导致加载包但不附加包- 这可能有助于延迟加载很少使用的包.foofoo::fNAMESPACEDESCRIPTIONfoo::ffoo
(我觉得这个建议实际上是一个有点过时,因为它意味着之间有更多的分离DESCRIPTION和NAMESPACE比目前存在的.)这意味着你应该使用@import plyr和参考功能plyr::ldply().但在现实中,它实际上是表明像把plyr在Suggests的领域DESCRIPTION,这是不完全由roxygen2标记容纳又不完全相同兼容R CMD check.
总之,官方的说法是Hadley的建议(你引用的)仅适用于极少使用的函数(很少使用的函数包)(和/或需要花费大量时间加载的软件包).否则,@importFrom就像WRE建议一样:
importFrom有选择地使用而不是import良好的做法,特别是当从具有十几个出口的包中导入时.
| 归档时间: |
|
| 查看次数: |
852 次 |
| 最近记录: |