missing() 和 is.null() 之间的范围区别

Tje*_*ebo 2 r

我很难理解is.null和之间的范围差异missing,特别是为什么以下内容不适用于is.null,但适用于missing

foo_iris <- function(a = NULL){
  if(!is.null(a)) return('not.null') else  return('is.null')
}

foo_iris(a = Species)
#> Error in foo_iris(a = Species): object 'Species' not found

foo_iris <- function(a = NULL){
  if(missing(a)) return('is.null') else return('not.null')
}

foo_iris(a = Species)
#> [1] "not.null"
Run Code Online (Sandbox Code Playgroud)

reprex 包(v0.3.0)于 2020 年 1 月 16 日创建

Rol*_*and 6

这与范围界定无关。

R 有惰性求值,这意味着只有在必要时才对参数求值。is.null需要评估a以检查它是否是对NULL对象的引用。此评估会引发错误。missing不评估a,请参阅以下文档help("missing")

这是一个“特殊”的原始函数:它不能评估它的参数。