我很难理解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 日创建
这与范围界定无关。
R 有惰性求值,这意味着只有在必要时才对参数求值。is.null需要评估a以检查它是否是对NULL对象的引用。此评估会引发错误。missing不评估a,请参阅以下文档help("missing"):
这是一个“特殊”的原始函数:它不能评估它的参数。