命名空间函数在R中的目录中

时间:2016-08-26 02:14:35

标签: r namespaces

我们假设我有一个带有自定义R函数的目录。

即,

myDir/f1.R
myDir/f2.R

如何将它们导入R,以便保留命名空间?

,即在R中打电话给我,我们称之为:

myDir::f1(<input>)

而不是f1(<input>)

这是在基础包中使用source时的默认行为。

1 个答案:

答案 0 :(得分:0)

这并不能完全回答您的问题,但无论如何可能对您有所帮助: 我经常在日常工作中使用很多函数来源/使用,并且在全局环境中有如此多的函数定义真的很烦人。我的解决方案是将相关函数封装在一个返回列表的虚函数中:

myFunctionNameSpace <- function() {

    function1 <- function(x) {
        print(paste0("Function 1 was called with argument ", x))   
    }

    function2 <- function(x) {
        helperFunction1()
        print(paste0("Function 2 was called with argument ", x))
    }

    helperFunction1 <- function() {
        print("Helper function 1 was called.")
    }


    return(list(
        function1 = function1,
        function2 = function2
    ))
}

myFunctionNameSpace <- myFunctionNameSpace()

如果您获取上述代码,则会在您的环境中获得单个对象myFunctionNameSpace。然后,您可以使用$运算符调用函数:

myFunctionNameSpace$function1(17)
myFunctionNameSpace$function2(42)

请注意,这也隐藏了您不想导出的任何“辅助函数”。它还允许嵌套这样的“命名空间”,最后但并非最不重要的是,它与RStudios自动完成功能非常兼容。