重新定义R的列表项查找,以便生成关键错误?

时间:2013-12-14 18:09:52

标签: r

当名称元素不在列表中时,使用“$”或“[[”返回“NULL”从名称中获取R列表中的元素。我更喜欢它会产生错误,因为这会使调试变得更容易。有没有办法重新定义这些运算符,以便我得到我想要的错误?

请注意,“get”具有我想要的行为,但在任何地方使用“get”而不是“$”会使我的代码更难阅读。

> myList <- list(a=5)
> myList
$a
[1] 5

> myList$b
NULL
> myList[["b"]]
NULL
> get("b", myList)
Error in get("b", myList) : object 'b' not found

1 个答案:

答案 0 :(得分:3)

我不确定这是做的事情,但这是可以做的事情。一般情况下,您可以在环境中放置掩盖内置函数的函数,并且它们会得到适当的使用,您只需要使用反引号。

`$` <- function(x,y) {
  S <- as.character(sys.call()[3]);
  a <- eval(substitute(.Primitive("$")(x, S)));
  if(!is.null(a)) a else stop("Not Found"); 
}

R>sleep$extra
 [1]  0.7 -1.6 -0.2 -1.2 -0.1  3.4  3.7  0.8  0.0  2.0  1.9  0.8  1.1  0.1 -0.1  4.4  5.5  1.6  4.6  3.4
R>sleep$CERA
Error in sleep$CERA : Not Found