我们可以有更多错误(消息)吗?

时间:2010-01-26 16:51:40

标签: r language-concepts

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

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

看到;如果恰好有一个“n”变量位于某个地方,aha(p = 2)会给我一个“答案”,因为R只会从那个被称为“环境”的神秘地方取“n”

3 个答案:

答案 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)
}