3

如果函数使用未在函数体中声明的变量,是否有办法在 R 中弹出错误消息:即,我希望有人标记这种类型的函数

aha<-function(p){
  return(p+n)
}

看; 如果某个地方碰巧有一个“n”变量,aha(p=2) 会给我一个“答案”,因为 R 只会从那个叫做“环境”的神秘地方取“n”

4

3 回答 3

18
于 2010-01-26T17:40:38.490 回答
5

里奇的建议非常好。

我只想补充一点,您应该考虑创建可以在干净的 R 环境中运行的单元测试用例。这也将消除对全局变量的担忧,并确保您的函数按照应有的方式运行。您可能要考虑为此使用RUnit。我安排了我的测试套件每天晚上在使用 RScript 的新环境中运行,这非常有效并且可以捕获任何类型的范围问题等。

于 2010-01-26T17:28:44.057 回答
1

编写 R 代码来检查其他 R 代码会很棘手。您必须找到一种方法来确定哪些代码位是变量声明,然后尝试确定它们是否已经在函数中声明。 编辑:前面的说法是正确的,但正如 Aniko 指出的那样,努力工作已经在codetools包装中完成。

可能对您有用的一件相关事情是强制从函数本身(而不是从封闭环境中)获取变量。

你的函数的这个修改版本总是会失败,因为n没有声明。

aha <- function(p) 
{ 
   n <- get("n", inherits=FALSE)
   return(p+n)
}
于 2010-01-26T17:18:17.120 回答