R 我应该如何引用导入包中的函数?
创建R包时,至少有两种方法可用于引用导入包中的函数 或者R 我应该如何引用导入包中的函数?,r,namespaces,roxygen2,R,Namespaces,Roxygen2,创建R包时,至少有两种方法可用于引用导入包中的函数 或者 无论何时调用函数,package::function,都要使用双冒号操作符显式命名函数 将importFrom(package,function)直接或通过#@importFrom package functionroxygen标记添加到命名空间文件中 每种方法的优缺点是什么 在每种语法实现的功能方面是否存在技术差异?支持使用package::function 它完全清楚了函数的来源 支持使用@importFrom包函数的参数 它涉及更少
package::function
,都要使用双冒号操作符显式命名函数importFrom(package,function)
直接或通过#@importFrom package function
roxygen标记添加到命名空间
文件中在每种语法实现的功能方面是否存在技术差异?支持使用
package::function
它完全清楚了函数的来源
支持使用
@importFrom包函数的参数
它涉及更少的键入,尤其是当一个函数被您的包多次使用时
因为它涉及到查找包和调用:
函数,包::函数
有一个小的运行时性能损失。看
总的来说,结果如何?
这两种方法都能起作用,而且两种方法的争论都不会压倒性,所以不要为此而失眠。只要选择一种方法并坚持下去
在我工作的地方采用的政策是,对于一些常用的软件包,应该使用
@importFrom
roxygen标签。例如,开发人员应该知道ddply
来自plyr
,或者以str
开头的函数来自stringr
。在这种情况下,了解函数的显式父级没有那么有用。对于此核心列表之外的函数(或者如果存在任何歧义),应使用:
来明确其来源。双冒号只能引用导出的函数。否则您需要使用三重冒号。@James True,但您不应该从其他人的包中访问未导出的函数,因为API可能会更改并破坏您的代码。疯狂猜测:我认为importFrom
会在加载包时导入函数,但:
会在运行时进行查找,因此,importFrom
将使包的加载时间更长,但:
将使代码运行速度较慢。我怀疑在每种情况下只有几微秒的差异。:
如果您只在一个或两个场合使用另一个软件包中的一个或两个函数,而不是使用其中的许多函数,则也是首选<代码>导入在使用其他软件包中的许多函数时会更好。此外,您可以随时重新分配pf@RichieCotton,尽管这个问题并不局限于非导出函数,但我接受您的观点。