R自定义函数仅判断当前环境对象是否存在 不查询全局环境
R语言函数内仅查询本地环境对象存在性的实现方法
exists()函数默认会沿环境继承链向上回溯查找所有父环境(包括全局环境),因此会匹配到全局环境中的同名对象,不符合仅判断函数内部是否定义的需求,你只需要调整两个参数即可实现需求:
- 将
inherits参数设置为FALSE,禁止函数沿环境链向上查找父环境 - 配合
environment()获取当前函数的本地运行环境,传给where参数明确查询范围
可运行测试示例
# 先在全局环境定义同名变量,模拟冲突场景 variable <- "来自全局环境的变量" check_local_var <- function() { # 函数未定义variable时查询 no_def_res <- exists("variable", where = environment(), inherits = FALSE) print(no_def_res) # 输出 FALSE,不会匹配全局环境的同名变量 # 函数内部定义variable后再查询 variable <- "来自函数本地环境的变量" has_def_res <- exists("variable", where = environment(), inherits = FALSE) print(has_def_res) # 输出 TRUE } check_local_var()
参数说明
inherits:默认值为TRUE,控制是否沿环境继承链向上查找父环境中的对象,设置为FALSE后仅会在指定的单一环境中查询where:指定查询的目标环境,在函数内部调用environment()会直接返回当前函数的本地运行环境,明确查询范围避免上下文影响
内容的提问来源于stack exchange,提问作者ESKim
相关产品推荐
相关产品推荐

