提问人:frandude 提问时间:1/5/2022 更新时间:1/5/2022 访问量:347
是否有等效于在 R 中使用双冒号运算符 (::) 和 source() ?
Is there an equivalent to using the double colon operator (::) with source() in R?
问:
由于我的项目包含许多不同的文件,这些文件只包含函数定义(然后我将其放在主工作流文件中),因此我经常会忘记哪个函数包含在哪个文件中。source()
如果我可以使用我的源文件(如包),语法如下,这将不是问题:.当然,该代码返回错误 (),但我希望有一个等效的运算符可用于源文件。source("file.r")::function()
Error: unexpected '::' in "source("file.r")::"
答:
6赞
r2evans
1/5/2022
#1
您可以使用环境来实现此目的,使用 代替 .$
::
如果您有文件:
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
优点:减少命名空间污染。如果在文件中定义了常量,其中的函数必须能够引用,则这很有效。从某种意义上说,这些常量对于同一文件中的函数是“私有的”(非常宽松地说)。
缺点:与“包”不同,必须相互查看的函数必须在同一文件中定义,或者必须具有另一种机制来确定在哪里可以找到其他函数。
评论
grep function *.R
findstr function *.R