如果函数使用变量,是否有一种方法可以在R中弹出错误消息 没有在函数体中声明:即,我希望有人标记这种类型的函数
aha<-function(p){
return(p+n)
}
看到;如果恰好有一个“n”变量位于某个地方,aha(p = 2)会给我一个“答案”,因为R只会从那个被称为“环境”的神秘地方取“n”
答案 0 :(得分:18)
如果您想在代码编写阶段而不是在运行时检测到这些潜在问题,那么codetools
包就是您的朋友。
library(codetools)
aha<-function(p){
return(p+n)
}
#check a specific function:
checkUsage(aha)
#check all loaded functions:
checkUsageEnv(.GlobalEnv)
这些会告诉您no visible binding for global variable ‘n’
。
答案 1 :(得分:5)
我想补充一点,你应该考虑创建一个在干净的R环境中运行的单元测试用例。这也将消除对全局变量的关注,并确保您的函数以他们应该的方式运行。您可能需要考虑使用RUnit。我的测试套件计划在每天晚上使用RScript在新环境中运行,这非常有效并且可以捕获任何类型的范围问题等。
答案 2 :(得分:1)
编写R代码来检查其他R代码会很棘手。您必须找到一种方法来确定哪些代码是变量声明,然后尝试确定它们是否已在函数中声明。
编辑:之前的陈述是真的,但正如Aniko指出的那样,已经在codetools
包中做了很多努力。
对您有用的一个相关的事情是强制从函数本身(而不是从封闭环境)获取变量。
此函数的修改版本将始终失败,因为未声明n
。
aha <- function(p)
{
n <- get("n", inherits=FALSE)
return(p+n)
}