如果函数使用未在函数体中声明的变量,是否有办法在 R 中弹出错误消息:即,我希望有人标记这种类型的函数
aha<-function(p){
return(p+n)
}
看; 如果某个地方碰巧有一个“n”变量,aha(p=2) 会给我一个“答案”,因为 R 只会从那个叫做“环境”的神秘地方取“n”
如果函数使用未在函数体中声明的变量,是否有办法在 R 中弹出错误消息:即,我希望有人标记这种类型的函数
aha<-function(p){
return(p+n)
}
看; 如果某个地方碰巧有一个“n”变量,aha(p=2) 会给我一个“答案”,因为 R 只会从那个叫做“环境”的神秘地方取“n”
里奇的建议非常好。
我只想补充一点,您应该考虑创建可以在干净的 R 环境中运行的单元测试用例。这也将消除对全局变量的担忧,并确保您的函数按照应有的方式运行。您可能要考虑为此使用RUnit。我安排了我的测试套件每天晚上在使用 RScript 的新环境中运行,这非常有效并且可以捕获任何类型的范围问题等。
编写 R 代码来检查其他 R 代码会很棘手。您必须找到一种方法来确定哪些代码位是变量声明,然后尝试确定它们是否已经在函数中声明。
编辑:前面的说法是正确的,但正如 Aniko 指出的那样,努力工作已经在codetools
包装中完成。
可能对您有用的一件相关事情是强制从函数本身(而不是从封闭环境中)获取变量。
你的函数的这个修改版本总是会失败,因为n
没有声明。
aha <- function(p)
{
n <- get("n", inherits=FALSE)
return(p+n)
}