Slovník | Vyhledávání | Mapa webu
 
Základy informatiky pro biologyVýpočetní matematické systémy Výuka jazyka R Vektory Subvektory

Logo Matematická biologie

Subvektory

K výpisu určité podmnožiny prvků vektoru můžeme použít hranatých závorek, [ ]. Obecně má pro vektor x tento příkaz tvar x[index], kde index je vektor jednoho z následujících tvarů:

1.

Vektor přirozených čísel. Jedná se o vektor indexů, který nabývá hodnot z množiny {1, 2, ..., length(x)}.

> x <- 2:16
> x[7]    
vypíše 7. složku vektoru x
[1]    8
> x[4:12]    vypíše 4.-12. složku vektoru x
[1]    5     6     7     8     9     10     11     12     13
Hodnota NA je vrácena v případě, že vektor index obsahuje přirozené číslo větší než je délka vektoru. Podobně R vrací prázdný vektor numeric(0) v případě, že vektor index obsahuje nulu:
> x[13:18]    vypíše 13.-18. složku vektoru x
[1]    14    15    16    NA    NA    NA
> x[c(7, 0, 5, 12)]    index 0 se ignoruje
[1]   8    6    13
> x[0]
[1]    integer(0)


Vektor index můžeme definovat rovněž použitím funkcí ke konstrukci numerických vektorů, např. c(), :, rep(), sample(), seq()
> x[c(3, 8, 10, 4, 7)]
[1]    4    9    11    5    8
> x[c(rep(4, 2), rep(7, 3))]
[1]    5    5    8    8    8
> x[sample(x, 5, replace=TRUE)]
[1]    6    10    11    4    6
> x[seq(from=4, to=20, by=3)]
[1]    5    8    11    14    NA    NA


Můžeme rovněž použít funkcí head() a tail(), které vrací prvních/posledních n prvků vektoru (implicitní nastavení n=6):
> head(x)
[1]    2    3    4    5    6    7
> tail(x, n=3)
[1]    14    15    16

2. Vektor záporných celých čísel. Vektorem záporných celých čísel index vymezujeme ty indexy vektoru x, jejichž odpovídající hodnoty nemají být vytištěny. Všechny prvky vektoru x, kromě těch specifikovaných vektorem index, jsou do výsledné podoby vypsány v jejich původním pořadí. Délka výsledného vektoru je length(x) - length(index).
> x[-c(1:10)]    vynechá prvních deset prvků vektoru
[1]    12    13    14    15    16
> x[-tail(x, 10)]
[1]    2    3    4    5    6    7
3.

Logický vektor. Prvky odpovídající hodnotám TRUE vektoru index jsou vypisovány, zatímco prvky odpovídající hodnotám FALSE jsou vynechány. Výsledný vektor je stejné délky jako počet hodnot TRUE vektoru index.

> x[c(TRUE, FALSE, TRUE, TRUE, FALSE, rep(c(TRUE, FALSE), 5))]    vektor index může být zadán vektorem hodnot TRUE a FALSE
[1]    2    4    5    7    9    11    13    15
> x[x>7 & x<=12]    vektor index může být dán omezujícími podmínkami - použitím porovnávacích a logických operátorů (porovnávací a logické operátory viz odstavec Porovnávací a logické operátory)
[1]    8    9    10    11    12


V případě, že vektor x obsahuje hodnoty NA, potřebujeme pomocí funkce is.na() zajistit, aby byly správně vynechány:
> (y <- c(7, 3, NA, 5, NA, NA, 9))
[1]    7    3    NA    5    NA    NA    9
> y[y<6]
[1]    3    NA    5    NA    NA
> y[y<6 & !is.na(y)]    vypíše ty hodnoty vektoru y, které jsou menší než 6 a jsou různé od hodnoty NA
[1]    3    5

Alternativou v této situaci může být funkce subset(). Jejím prvním argumentem je vektor, ze kterého chceme získat jeho podmnožinu, druhým argumentem je vektor omezujících podmínek. Výhodou této funkce je, že hodnoty NA jsou automaticky považovány za FALSE, takže nemusí být odstraňovány pomocí funkce is.na().
> subset(y, y<6)
[1]    3    5

4.

Vektor znakových řetězců. Tento způsob může být použit pouze v případě, kdy prvky vektoru mají názvy. V tom případě může být vektor index použit stejným způsobem jako v případě přirozených čísel v odrážce 1, řetězce ve vektoru index odpovídají názvům prvků vektoru x.

> (ovoce <- c(banan=3, broskev=8, jablko=7, pomeranc=5))    přiřazení názvu jednotlivým prvkům vektoru

  banan broskev jablko pomeranc
 
3
8
7
5

> names(ovoce)    každý prvek vektoru má opravdu svůj název
[1]    "banan"    "broskev"    "jablko"    "pomeranc"

Jiný způsob definice přiřazení názvu jednotlivým prvkům vektoru:
> ovoce <- c(3, 8, 7, 5)}
> names(ovoce) <- c("banan", "broskev", "jablko", "pomeranc")
> ovoce[c("broskev", "jablko")]

  broskev jablko
 
8
7

 

 

MATLAB používá pro výpis subvektorů kulatých závorek, pro nekladné argumenty vrací chybové hlášení.

 

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