如何防止R中的命名空间污染

时间:2013-03-12 12:05:21

标签: r namespaces scope

这是一种情况,我有一个定义函数的文件,让我们称之为tmpFunctions.R和一个使用它的文件(让我们称之为tmpRunner.R)。 tmpFunctions.R中的函数对无意使用从未在其中定义的变量,但在tmpRunner.R中的全局范围中定义。因为,当从tmpRunner.R调用函数时,变量已经存在于全局分数中,解释器不会发出任何错误并且程序运行顺利,但产生错误的结果。 这是一个例子:

tmpFuncitons.R:

my.func <- function(x){
  return(X * 2) # typo; should be error
}

tmpRunner.R

source('tmpFunctions.R')
X <- 10  #calling my.func(...) from this point on will not cause runtime errors
for(i in seq(10)){
  print(sprintf('%s ==> %s', i, my.func(i)))
}

输出:

> source('C:/tmp/tmpRunner.R')
[1] "1 ==> 20"
[1] "2 ==> 20"
[1] "3 ==> 20"
[1] "4 ==> 20"
[1] "5 ==> 20"
[1] "6 ==> 20"
[1] "7 ==> 20"
[1] "8 ==> 20"
[1] "9 ==> 20"
[1] "10 ==> 20"

有没有办法通过与Perl的use strict类似的东西来阻止这种情况,导入tmpFunctions.R中的函数而不将它们暴露给全局范围(很可能不会)?

我还试图为R寻找源代码静态分析工具(在运行代码之前获取警告消息),但一无所获。

0 个答案:

没有答案