重新定义R';s列表项查找,以便生成关键错误?
使用“$”或“[[”按名称从R列表中获取元素时,如果命名元素不在列表中,则返回“NULL”。我更希望它产生错误,因为这将使调试更容易。是否有方法重新定义这些运算符,以便获得所需的错误 请注意,“get”具有我想要的行为,但是在任何地方使用“get”而不是“$”都会使我的代码更难阅读重新定义R';s列表项查找,以便生成关键错误?,r,R,使用“$”或“[[”按名称从R列表中获取元素时,如果命名元素不在列表中,则返回“NULL”。我更希望它产生错误,因为这将使调试更容易。是否有方法重新定义这些运算符,以便获得所需的错误 请注意,“get”具有我想要的行为,但是在任何地方使用“get”而不是“$”都会使我的代码更难阅读 > myList <- list(a=5) > myList $a [1] 5 > myList$b NULL > myList[["b"]] NULL > get("b", m
> 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
>myList myList
一美元
[1] 5
>myList$b
无效的
>myList[[“b”]]
无效的
>获取(“b”,myList)
get(“b”,myList)中出错:找不到对象“b”
我不确定这是否是您应该做的事情,但这是您可以做的事情。通常,您可以在您的环境中放置函数来屏蔽内置项,它们会得到适当的使用,您只需要使用反引号
`$` <- 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
`$`我不确定这是您应该做的事情,但这是您可以做的事情。一般来说,您可以在您的环境中放置函数来屏蔽内置项,它们会得到适当的使用,您只需要使用反引号
`$` <- 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
`$`我不确定这是您应该做的事情,但这是您可以做的事情。一般来说,您可以在您的环境中放置函数来屏蔽内置项,它们会得到适当的使用,您只需要使用反引号
`$` <- 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
`$`我不确定这是您应该做的事情,但这是您可以做的事情。一般来说,您可以在您的环境中放置函数来屏蔽内置项,它们会得到适当的使用,您只需要使用反引号
`$` <- 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
`$`为什么使用sys.call()[3]
?与sys.call()
不同?然后可以将$
更改为get
函数,以避免使用此新函数?sys.call()[3]
是sys.call()的第三个元素,这是元素的名称。在我的示例中,sleep$extra
有一个sys.call()c(`$`,sleep,extra)
是的,当然,但是它不是一般的,关于通过get
更改$
函数吗?这就是你要问的问题:`$`我想@Llopis是在谈论类似“$”的东西吗为什么使用sys.call()[3]
?与sys.call()
不同?然后可以将$
更改为get
函数,以避免使用此新函数?sys.call()[3]
是sys.call()的第三个元素,这是元素的名称。在我的示例中,sleep$extra
有一个sys.call()c(`$`,sleep,extra)
是的,当然,但是它不是一般的,关于通过get
更改$
函数吗?这就是你要问的问题:`$`我想@Llopis是在谈论类似“$”的东西吗为什么使用sys.call()[3]
?与sys.call()
不同?然后可以将$
更改为get
函数,以避免使用此新函数?sys.call()[3]
是sys.call()的第三个元素,这是元素的名称。在我的示例中,sleep$extra
有一个sys.call()c(`$`,sleep,extra)
是的,当然,但是它不是一般的,关于通过get
更改$
函数吗?这就是你要问的问题:`$`我想@Llopis是在谈论类似“$”的东西吗为什么使用sys.call()[3]
?与sys.call()
不同?然后可以将$
更改为get
函数,以避免使用此新函数?sys.call()[3]
是sys.call()的第三个元素,这是元素的名称。在我的示例中,sleep$extra
有一个sys.call()c(`$`,sleep,extra)
是的,当然,但是它不是一般的,关于通过get
更改$
函数吗?这就是你要问的问题:`$`我想@Llopis是在谈论类似“$”的东西吗