繁体   English   中英

是否有等效于在 R 中使用带有 source() 的双冒号运算符 (::) 的方法?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM