[英]Is there an equivalent to using the double colon operator (::) with source() in R?
由于我的项目包含许多不同的文件,这些文件只包含 function 定义(然后我在主工作流文件中使用source()
),我经常会忘记哪个 function 包含在哪个文件中。
如果我可以使用我的源文件(如具有如下语法的包),这将不是问题: source("file.r")::function()
。 当然,该代码返回一个错误( Error: unexpected '::' in "source("file.r")::"
),但我希望有一个等效的运算符可以用于源文件。
您可以使用环境来实现这一点,使用$
代替::
。
如果您有文件:
file1.R
func1 <- function(x) x + 1 func2 <- function(y) y + 2
file2.R
func3 <- function(x) x + 3 func4 <- function(y) y + 4
然后您可以为它们创建环境并使用local=
将它们加载到那里:
e1 <- new.env()
source("file1.R", local = e1)
e2 <- new.env()
source("file2.R", local = e2)
ls()
# [1] "e1" "e2"
e1$func1(1)
# [1] 2
e1$func2(1)
# [1] 3
e2$func3(1)
# [1] 4
e2$func4(1)
# [1] 5
注意:在file2.R
中定义的函数不会“看到” file1.R
中的函数。 这有一些优点和缺点:
优点:减少了命名空间污染。 如果您在文件中定义了其中的函数必须能够引用的常量,那么这很好用。 从某种意义上说,这些常量对于同一个文件中的函数是“私有的”(非常松散地说)。
缺点:与“包”不同,必须相互看到的函数必须在同一个文件中定义,或者必须有另一种机制来确定在哪里找到其他函数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.