exists
Je objekt definován?
exists {base} | Dokumentace R v češtině |
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 |
frame |
rámec volajícího seznamu. Ekvivalentní k dávání |
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 |
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 (!)