[R] 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 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 (!)

 
Článek ze dne 11. 8. 2018 byl naposledy upraven dne 11. 8. 2018 a zobrazen celkem 12595×, naposledy dne 18. 4. 2024 v 17:57.
 
 

Komentáře:

Jméno autora:
Email (nebude zveřejněn):
Komentář:
Sem napiš slovo Adamov:




Stránka:
 
Citace: Kalina, J., Horáková, D., Kuchař, J., Správným směrem [online]. Jiří Kalina, 2014 [cit. 2024-04-19]
Dostupné z: http://spravnym.smerem.cz/Tema/%5bR%5d%20exists&typzarizeni=c.
 
Desktopová verze | Mobilní verze