将attach 和sys.source 组合到一个环境中并附加该环境。这里我在文件my_fun.R中有两个函数:
foo <- function(x) {
mean(x)
}
bar <- function(x) {
sd(x)
}
在我加载这些函数之前,显然没有找到:
> foo(1:10)
Error: could not find function "foo"
> bar(1:10)
Error: could not find function "bar"
创建一个环境并将文件导入其中:
> myEnv <- new.env()
> sys.source("my_fun.R", envir = myEnv)
仍然不可见,因为我们没有附加任何东西
> foo(1:10)
Error: could not find function "foo"
> bar(1:10)
Error: could not find function "bar"
当我们这样做时,它们是可见的,并且因为我们已将环境的副本附加到搜索路径,所以函数在rm()-ed 中仍然存在:
> attach(myEnv)
> foo(1:10)
[1] 5.5
> bar(1:10)
[1] 3.027650
> rm(list = ls())
> foo(1:10)
[1] 5.5
我仍然认为您最好使用自己的个人包裹,但同时上述内容可能就足够了。请记住,搜索路径上的副本就是副本。如果函数相当稳定并且您没有编辑它们,那么上面的方法可能有用,但如果您正在开发和修改函数,这可能比它的价值更麻烦。
第二种选择是将它们全部命名为.foo 而不是foo,因为ls() 不会返回这样命名的对象,除非设置了参数all = TRUE:
> .foo <- function(x) mean(x)
> ls()
character(0)
> ls(all = TRUE)
[1] ".foo" ".Random.seed"