当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R exists 是否已定义对象?


R语言 exists 位于 base 包(package)。

说明

寻找一个R给定名称的对象并可能返回它

用法

exists(x, where = -1, envir = , frame, mode = "any",
       inherits = TRUE)

get0(x, envir = pos.to.env(-1L), mode = "any", inherits = TRUE,
     ifnotfound = NULL)

参数

x

变量名(以字符串或符号形式给出)。

where

在哪里寻找对象(参见详细信息部分);如果省略,该函数将进行搜索,就好像对象名称在表达式中出现时未加引号一样。

envir

另一种指定要查看的环境的方法,但通常使用 where 参数更简单。

frame

调用列表中的一个框架。相当于将 where 指定为 sys.frame(frame)

mode

寻求对象的模式或类型:请参阅“详细信息”部分。

inherits

是否应该搜索环境的封闭框架?

ifnotfound

x不存在时,get0(x, *)的返回值。

细节

where 参数可以通过以下几种方式指定查找对象的环境: 作为整数(search 列表中的位置);作为搜索列表中元素的字符串名称;或作为 environment(包括使用 sys.frame 访问当前活动的函数调用)。 envir 参数是指定环境的另一种方法,但主要是为了向后兼容。

此函数查看名称 x 是否在指定环境中具有绑定到它的值。如果inheritsTRUE 并且在指定环境中未找到x 的值,则搜索环境的封闭框架,直到遇到名称x。有关环境及其 shell 结构的详细信息,请参阅environment 和“R 语言定义”手册。

警告: inherits = TRUE是默认行为R但不适合S。

如果指定了mode,则仅查找该类型的对象。 mode 可以指定集合 "numeric""function" 之一(请参阅 mode ):集合的任何成员都足够。 (即使指定了集合的成员也是如此,因此例如 mode = "special" 将查找任何类型的函数。)

exists(): 逻辑,当且仅当找到具有正确名称和模式的对象时为 true。

get0(): 对象 - 来自 get(x, *) - 如果 exists(x, *) 为 true,否则 ifnotfound

注意

使用 get0() ,而不是易于阅读但效率有些低的

    if (exists(myVarName, envir = myEnvir)) {
      r <- get(myVarName, envir = myEnvir)
      ## ... deal with r ...
    }
  

您现在可以使用更高效的(并且稍微难以阅读)

    if (!is.null(r <- get0(myVarName, envir = myEnvir))) {
      ## ... deal with r ...
    }
  

例子

##  Define a substitute function if necessary:
if(!exists("some.fun", mode = "function"))
  some.fun <- function(x) { cat("some.fun(x)\n"); x }
search()
exists("ls", 2) # true even though ls is in pos = 3
exists("ls", 2, inherits = FALSE) # false

## These are true (in most circumstances):
identical(ls,   get0("ls"))
identical(NULL, get0(".foo.bar.")) # default ifnotfound = NULL (!)

参考

Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988) The New S Language. Wadsworth & Brooks/Cole.

也可以看看

gethasName 。对于完全不同类型的 “existence” 检查,即如果指定了函数参数,missing ;还有一种不同的类型,即如果文件存在,则 file.exists

相关用法


注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Is an Object Defined?。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。