NAMESPACE
→ V souboru NAMESPACE je uvedeno, které objekty se mají zpřístupnit uživateli.
R automaticky vytváří pro každý balík tzv. ,,namespace“, což je lokální prostor balíku, kde se nachází funkce a proměnné. Díky tomu R ví, odkud má objekt načíst (kde má hledat funkci).
Ukážeme si na příkladu. Vytvořme si matici X o třech řádcích a třech sloupcích:
> X <- matrix(1:9,3,3)
> X
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9
Zjistíme počet řádků:
> nrow(X)
[1] 3
A teď se podíváme na funkci nrow:
> nrow
function (x)
dim(x)[1L]
<bytecode: 0x00000000092b3660>
<environment: namespace:base>
Jak vidíme, funkce nrow() pouze aplikuje funkci dim() a odkáže se na první prvek výsledku.
> dim(X)
[1] 3 3
Samozřejmě, funkce dim() opravdu vrátí vektor dimenzi řádků a sloupců.
Co se ovšem stane, změníme-li funkci dim na úplně jinou funkci, řekněme, že tak nazveme funkci, která počítá dvojnásobek hodnoty argumentu x?
> dim<-function(x){return(2*x)}
> dim
function(x){return(2*x)}
> dim(X)
[,1] [,2] [,3]
[1,] 2 8 14
[2,] 4 10 16
[3,] 6 12 18
Funkce dim() již nepočítá dimenzi, ale opravdu vynásobila každý prvek naší matice X dvěma.
Jak to ovlivní funkci nrow(), která používá pro výpočet funkci dim()?
> nrow(X)
[1] 3
Možná trochu nečekaně, ale na funkci nrow() se nic nezměnilo! Funguje tak jako předtím, protože ví, že má hledat funkci dim v namespace balíku base, kam dim (podobně jako nrow) patří.
Pokud se balík R načítá pomocí funkce library(), používá informace ze souboru NAMESPACE, aby zpřístupnil pro použití:
- pouze funkce a objekty z balíku, které jsou v souboru NAMESPACE specificky definované pomocí funkce export():
- export(funkce1)
- export(funkce2)
- funkce z těch balíků, které jsou v souboru NAMESPACE definované pomocí funkce import() nebo importFrom():
- import(ggplot2)
- import(MASS)
- importFrom(pkg1, a, b) #naimportuje jen objekty a a b z balíku pkg1
- generické funkce z balíku definované pomocí funkce S3method():
- S3method(print, myclass) #jméno funkce, třída