Slovník | Vyhledávání | Mapa webu
 
Základy informatiky pro biologyAnalýza dat v R Tvorba R balíku Struktura R balíku NAMESPACE

Logo Matematická biologie

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

 

 

 
vytvořil Institut biostatistiky a analýz Lékařské fakulty Masarykovy univerzity