Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 我应该如何引用导入包中的函数?_R_Namespaces_Roxygen2 - Fatal编程技术网

R 我应该如何引用导入包中的函数?

R 我应该如何引用导入包中的函数?,r,namespaces,roxygen2,R,Namespaces,Roxygen2,创建R包时,至少有两种方法可用于引用导入包中的函数 或者 无论何时调用函数,package::function,都要使用双冒号操作符显式命名函数 将importFrom(package,function)直接或通过#@importFrom package functionroxygen标记添加到命名空间文件中 每种方法的优缺点是什么 在每种语法实现的功能方面是否存在技术差异?支持使用package::function 它完全清楚了函数的来源 支持使用@importFrom包函数的参数 它涉及更少

创建R包时,至少有两种方法可用于引用导入包中的函数

或者

  • 无论何时调用函数,
    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,尽管这个问题并不局限于非导出函数,但我接受您的观点。