当名称元素不在列表中时,使用“$”或“[[”返回“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
答案 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