當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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?。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。