为何R语言函数中缺失参数时使用方括号索引不抛出错误?
为什么这段R代码没抛出「y未找到」的错误?
先看示例代码:
> f <- function(x, y) { + x[y] + } > f(1) [1] 1
按常理来说,调用f(1)时没传参数y,应该抛出如下错误才对:
Error: object 'y' not found
注:这段代码等价于直接调用索引函数的写法:
> f <- function(x, y) { + `[`(x, y) + }
原因解析
问题出在R内置的索引函数[的特殊参数处理逻辑上:
- 当你调用
x[y](也就是[(x, y))时,如果第二个索引参数没被传入,它会被识别为缺失值,而不是直接报错“找不到对象y”。 - 对于长度为1的向量来说,用缺失值作为索引时,
[函数会默认返回整个向量的所有元素,也就是这里的1。
对比普通函数就能看出区别:如果是自定义的普通函数,比如:
g <- function(x, y) { x + y } g(1)
这时候就会抛出Error in g(1) : argument "y" is missing, with no default的错误,因为普通函数没有内置的缺失参数处理逻辑,而[作为R核心的内置函数,针对索引场景做了特殊处理。
内容的提问来源于stack exchange,提问作者jay.sf
相关产品推荐
相关产品推荐

