Slovník | Vyhledávání | Mapa webu
 
Základy informatiky pro biologyAnalýza dat v R Datové struktury Vektory

Logo Matematická biologie

Vektory

Protože vektory jsou základem analýzy v R, je nezbytné, abyste ovládali podrobnou práci s nimi, kterou můžete nastudovat zde: Základy informatiky pro biologyVýpočetní matematické systémy Výuka jazyka R Vektory.  Dozvíte se zde všechny způsoby tvorby vektorů, jejich indexování, jakým způsobem se vektory zkracují a prodlužují, naučíte se pracovat s faktory a provádět základní operace.

Následující text předpokládá znalosti z výše uvedené jednotky. Zde se soustředíme podrobněji na některé koncepty a problémy práce s vektory a přidáme další funkce pro práci se specifickými druhy vektorů.

Velikost vektoru

Jednou z mnoha nekonzistencí R, na které Vás v celém kurzu budeme průbežně upozorňovat, je definice jeho délky.

V některých případech se chová, jakoby jeho velikost byla určena už na začátku - nedá se z něj tedy odstranit prvek a nedá se ani přidat prvek doprostřed vektoru.

Přidání prvku doprostřed vektoru a odstranění prvku se proto děje s pomocí vytvoření nového vektoru, který se přiřadí původní proměnné. Mějme vektor x:

>  x <- c (115,2,35,8,16)

Přidání hodnoty 100 na třetí pozici se provede vytvořením nového vektoru, kde ve funkci concatenate c() spojíme první dva prvky vektoru x (výběr pomocí indexace), číslo 100 a nakonec poslední tři prvky vektoru (výběr pomocí indexace) a tímto novým vektorem přepíšeme objekt x:
>  x <- c (x[1:2], 100, x[3:5])

 

Odstranění páté pozice se provede také vytvořením nového vektoru z původního vektoru, bez pozice 5 a jeho přirazením objektu x:

>  x <- x[-5]
 

Paradoxně  přidání prvku na konci vektoru je možné i bez vytvoření nového vektoru:

>  x[6] <- -5 # vytvoří novou hodnotu -5 a přidá ji na 6. místo vektoru
>  x[9] <- 10 # vytvoří novou hodnotu 10 a přidá ji na 9. místo vektoru - místo 7. a 8. dostane hodnotu NA

 

Vektorizace funkcí

Mnohé funkce aplikované na vektory zejména operátory a matematické funkce (viz Základy informatiky pro biologyVýpočetní matematické systémy Výuka jazyka R Konstanty, operátory a matematické výpočtyjsou tzv.. vektorizované  aplikují se na každý element vektoru.

Např.:

> a <- c(1,2,3)
> b <- c(-1, -2, -3)

a + b vytvoří vektor a [1] + b [1], a [2] + b [2], a [3] + b [3]

> a + b
[1] 0 0 0

Toto urychluje výpočty, je to ale i zdrojem potenciálních problémů zejména v případě, že vektory nejsou stejné délky v r existuje tzv. recyklace.

Recyklace vektorů

Při spojování a jiných operacích se prvky kratších vektorů recyklují. Ukážeme si to na příkladu:

> a <- c(53,10,22,30,58,16)
> b
<- c(1,2,3,4)
> d
<- c(1,2)

Spojíme-li vektory, z nichž jeden je kratší, jeho hodnoty se recyklují. Tento proces je automatický, a v případě, že délka delšího vektoru není násobkem délky kratšího vektoru, R vydá varovnou hlášku:
> rbind(a,b)
   [,1] [,2] [,3] [,4] [,5] [,6]
a    53   10   22   30   58   16
b    1    2    3    4    1    2

Warning message:
In rbind(a, b) :
  number of columns of result is not a multiple of vector length (arg 2)
> a + b

[1] 54 12 25 34 59 18
Warning message:
In a + b : longer object length is not a multiple of shorter object length

V případě, že délka delšího vektoru JE násobkem délky kratšího vektoru, recyklace proběhne bez jakéhokoliv upozornění:

> rbind(a,d)
   [,1] [,2] [,3] [,4] [,5] [,6]
a    53   10   22   30   58   16
b     1    2    1    2    1    2

> a + d
[1] 54 12 23 32 59 18

To je častým zdrojem chyb v analýze, zejmnéna není-li kratší vektor v operaci očekáván. Je proto vhodné před těmito operacemi testovat shodnost délky vektorů.

 

Názvy prvků vektoru

Pokud se nechceme odkazovat na prvky přes jejich pozici, ale pomocí jména, můžeme prvkům vektoru přiřadit atribut názvu.

To je výhodné zejména pokud:

  • očekáváme, že se pořadí prvků může změnit
  • chceme se místo pořadí odvolat na jméno kvůli přehlednosti


> x <- c(1,2,3)
> names(x)
<- c("a", "b", "c")
> x

a b c
1 2 3

> x["b"]
b
2

 
vytvořil Institut biostatistiky a analýz Masarykovy univerzity | | zpětné odkazy | validní XHTML 1.0 Strict