Je objekt definován?
Popis
Hledat R objekt daného jména a případně ho vrátit
Použití
exists(x, where = -1, envir = , frame, mode = "any",
inherits = TRUE)
get0(x, envir = pos.to.env(-1L), mode = "any", inherits = TRUE,
ifnotfound = NULL)
Argumenty
x |
jméno proměnné (zadáno jako řetězec znaků).
|
where |
kde hledat objekt (viz. sekce Detaily); v případě vynechání, funkce bude hledat tak, jakoby se jméno objektu objevilo necitované ve výrazu.
|
envir |
alternativní způsob specifikace prostředí, ve kterém hledat, ale většinou je jednodušší použít jenom where argument.
|
frame |
rámec volajícího seznamu. Ekvivalentní k dávání where jako sys.frame(frame) .
|
mode |
režim nebo typ hledaného objektu: viz. sekce Detaily
|
inherits |
mají být prohledány uzavírající rámce prostředí?
|
ifnotfound |
návratová hodnota get0(x, *) když x neexistuje.
|
Detaily
where argument může specifikovat prostředí, ve kterém hledat objekt, kterýmkoliv z následujících způsobů: jako integer (pozice v search seznamu); jako jméno (řetězec znaků) elementu v search seznamu; nebo jako environment
(včetně používání sys.frame k přistoupení k momentálně aktivním voláním funkcí). envir argument je alternativní způsob specifikace prostředí, ale je tam primárně pro zajištění kompatibility.
Tahle funkce hledá, jestli jméno x má navázanou hodnotu ve specifikovaném prostředí. Jestli je inherits TRUE a hodnota pro
x není nalezena ve specifikovaném prostředí, uzavírající rámce prostředí jsou prohledávány dokud není nalezeno x . Viz. environment a ‘R Language Definition’ manuál pro detaily o struktuře prostředí a jejich uzávěr.
Varování:
inherits = TRUE je předvolené chování pro R, ale ne pro S.
Jestli je mode specifikována, jsou hledány jenom objekty toho typu.
mode může specifikovat jednu z kolekcí "numeric" a "function" (viz. mode ): jakýkoliv člen kolekce je dostačující. (Tohle dokonce platí, jestliže je člen kolekce specifikován, takže například mode = "special" bude hledat jakýkoliv typ funkce.)
Hodnota
exists(): Logical, true jenom jestli je nalezen objekt správného jména a režimu.
get0(): Objekt—jako z get(x, *) —
jestli exists(x, *) je true, jinak ifnotfound .
Poznámka
get0() , je jednodušší na čtení, ale víc neefektivní
if (exists(myVarName, envir = myEnvir)) {
r <- get(myVarName, envir = myEnvir)
## ... zaobcházet s r ...
}
můžete použít víc efektivní (a poněkud těžší na čtení)
if (!is.null(r <- get0(myVarName, envir = myEnvir))) {
## ... zaobcházet s r ...
}
Reference
Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988)
The New S Language.
Wadsworth & Brooks/Cole.
Viz. také
get a hasName . Pro poněkud jiný druh kontroly “existence”, konkrétně jestli byli specifikovány argumenty funkce, missing ;a pro jěště jiný typ, a to jestli soubor existuje, file.exists .
Příklady
## Definovat náhradní funkci jestli je potřeba:
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
## Tyhle jsou true (ve většině případů):
identical(ls, get0("ls"))
identical(NULL, get0(".foo.bar.")) # default ifnotfound = NULL (!)
|