8 Kreiranje vektora

Vektor je uređeni niz koji nastaje pridruživanjem elemenata. Uređeni niz znači da je redno mjesto elementa fiksno i da se pozivom određenog rednog mjesta element može identificirati. Nadalje, važno je znati da elementi moraju biti istog tipa. Ako elementi nisu istog tipa, tada se radi o listi (više o tome kasnije), a ne vektoru.

Jedna od ključnih karakteristika vektora u R-u je da svi elementi unutar vektora moraju biti istog tipa. Ako se pokuša kombinirati elemente različitih tipova, R će implicitno promijeniti tip podataka elemenata u vektoru kako bi osigurao homogenost. Na primjer, kombiniranje numeričkih i znakovnih tipova rezultirat će vektorom znakovnog tipa, što može dovesti do neočekivanih rezultata ili grešaka u kasnijim analizama.

8.1 Kreiranje vektora koristeći izravan upis elemenata

Elementi se pridružuju vektoru koristeći funkciju combine, c(). Primjer kreiranja vektora:

a <- c(1,2,3,4,5)
b<-c(5,10,15,20,25)
c<-c("Pula", "Rijeka", "Zagreb", "Osijek","Split")
d<-c("Iva","Ana","Maja","Marko","Ivan")
e<-c(TRUE,TRUE,TRUE,FALSE,FALSE)

Ispis vektora vrši se upisom naziva vektora ili pomoću funkcije print().

print(a)
## [1] 1 2 3 4 5

No, ispis je moguć i samo pozivom naziva vektora:

b
## [1]  5 10 15 20 25

ili

c
## [1] "Pula"   "Rijeka" "Zagreb" "Osijek" "Split"

Također, može se opaziti da neće biti razlike u načinu ispisa s obzirom na to koristi li se print() ili samo naziv.

print(d)
## [1] "Iva"   "Ana"   "Maja"  "Marko" "Ivan"
e
## [1]  TRUE  TRUE  TRUE FALSE FALSE

8.2 Vektor indeksa

Vektor koji sadrži redoslijedne cijele brojeve kao elemente naziva se i vektor indeksa, zbog toga što vrijednosti elemenata odgovaraju rednim mjestima. Takvi se vektori ponekad koriste kao pomoćna radnja pri izračunima.

f <- 1:100
f
##   [1]   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17  18
##  [19]  19  20  21  22  23  24  25  26  27  28  29  30  31  32  33  34  35  36
##  [37]  37  38  39  40  41  42  43  44  45  46  47  48  49  50  51  52  53  54
##  [55]  55  56  57  58  59  60  61  62  63  64  65  66  67  68  69  70  71  72
##  [73]  73  74  75  76  77  78  79  80  81  82  83  84  85  86  87  88  89  90
##  [91]  91  92  93  94  95  96  97  98  99 100

8.3 Kreiranje vektora cjelobrojnih vrijednosti u zadanom intervalu

Ponekad je potrebno kreirati duži vektor, pa čak i uz neke specifične karakteristike, te bi ručni upis bio prezahtjevan. Tada su sljedeće mogućnosti vrlo korisne.

f <- 100:200
f
##   [1] 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117
##  [19] 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135
##  [37] 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153
##  [55] 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171
##  [73] 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189
##  [91] 190 191 192 193 194 195 196 197 198 199 200

Prethodnom naredbom kreira se vektor koji sadrži sve cjelobrojne vrijednosti između 100 i 200, uključujući 100 i 200. Na takav način mogu se kreirati vektori koji će sadržavati cijele brojeve u bilo kojem rasponu.

8.4 Kreiranje sekvencijskih vektora

g<-seq(1, 200, by=3)
g
##  [1]   1   4   7  10  13  16  19  22  25  28  31  34  37  40  43  46  49  52  55
## [20]  58  61  64  67  70  73  76  79  82  85  88  91  94  97 100 103 106 109 112
## [39] 115 118 121 124 127 130 133 136 139 142 145 148 151 154 157 160 163 166 169
## [58] 172 175 178 181 184 187 190 193 196 199

Prethodnom funkcijom generiran je vektor g, kojemu je prva vrijednost 1, a svaka sljedeća vrijednost je treća po redu, do 200. Promjenom parametara može se kontrolirati izlaz. Na primjer, seq(5,10,2) rezultirat će vektorom koji će sadržavati vrijednosti 5, 7 i 9.

8.5 Kreiranje vektora s ponovljenim vrijednostima

h<-rep(c(1, 5, 10), times=2)
h
## [1]  1  5 10  1  5 10

Prethodnom funkcijom kreiran je vektor temeljem replikacije zadanog vektora c(1, 5, 10), na način da se ponavlja dva puta. Umjesto times=2, moguće je koristiti, na primjer, each=2, pri čemu se svaka vrijednost ponavlja dva puta (1, 1, 5, 5, 10, 10), ili npr. length.out=7, pri čemu kreira vektor duljine 7 na način da se niz vrijednosti ponavlja dok se ne dosegne sedam elemenata. Isprobajte sami.

U situacijama u kojima je potrebno kreirati vektor koji sadrži elemente koji se ponavljaju, to se može učiniti koristeći naredbu rep(). Naredba rep() ima dva parametra. Prvi parametar je broj ili znak koji se ponavlja, a drugi parametar označava koliko će se puta taj broj ili znak ponoviti.

m <- c(rep(2,4), rep(0,2), rep(5,3))
m
## [1] 2 2 2 2 0 0 5 5 5

Ovo može biti korisno, na primjer, u linearnom programiranju gdje je potrebno definirati vektor smjera ograničenja.

m <- c(rep("<=", 3), rep(">=", 4), "=")
m
## [1] "<=" "<=" "<=" ">=" ">=" ">=" ">=" "="

8.6 Kreiranje vektora koristeći teorijske distribucije vjerojatnosti/ generator slučajnih brojeva

U nekim analizama, bit će potrebno kreirati vektore temeljem teorijskih distribucija vjerojatnosti. U paketu stats koji je dio osnovnog R okruženja, za kreiranje vektora vezanih uz kreiranje slučajnih brojeva uz pomoć teorijskih distribucija vjerojatnosti. rnorm() je generator slučajnih brojeva baziran na normalnoj distribuciji i jedan je od najčešće korištenih generatora slučajnih brojeva.

Na primjer, ako se želi kreirati vektor koji će sadržavati 100 elemenata koji se ravnaju prema normalnoj distribuciji s prosjekom 55 i standardnom devijacijom 5, to je moguće učiniti na sljedeći način:

norm <- rnorm(100, 55,5)
norm
##   [1] 53.57920 55.45426 55.68188 61.29836 62.18675 51.65073 52.93328 65.60611
##   [9] 51.40919 58.54843 53.07300 61.85445 58.25193 49.30072 48.95712 58.95380
##  [17] 57.02352 54.65061 56.71766 44.44018 47.13322 54.43795 50.43657 50.14891
##  [25] 64.10079 56.65924 62.74854 54.79835 56.37489 58.92215 55.88115 63.71101
##  [33] 60.74493 52.44172 58.63698 54.10592 56.28923 53.08100 58.74506 67.03746
##  [41] 53.50154 44.90233 58.35664 47.58380 58.54664 53.06469 53.57562 51.76507
##  [49] 67.47492 56.51805 47.07050 64.91454 57.28523 57.94050 62.42400 59.25026
##  [57] 56.28083 61.05007 58.77228 45.18518 58.97858 52.77712 57.08027 60.41324
##  [65] 58.02396 56.52987 50.32313 48.50367 46.23966 57.27597 51.12077 61.67029
##  [73] 65.18494 55.31812 53.75895 57.43111 52.33770 54.45102 44.27021 55.56254
##  [81] 47.96790 51.40481 53.18227 56.84629 45.69193 63.12266 46.99099 57.02650
##  [89] 50.17096 56.66202 55.06901 62.26060 53.36103 58.62865 53.33115 45.93221
##  [97] 59.49964 57.84325 58.50190 50.15450

Nalik ovom primjeru, moguće je kreirati vektore koji se ravnaju i prema drugim teorijskim distribucijama. Među najčešće korištenima su runif(), koji funkcionira kao generator slučajnih brojeva baziran na uniformnoj distribuciji, rbinom() na binomnoj distribuciji, rpois() na Poissonovoj distribuciji, rchisq() na Hi-kvadrat distribuciji, rf() na F-distribuciji, rbeta() na beta distribuciji, rgamma() na gamma distribuciji. Pri korištenju funkcija kao što su runif() ili rnorm(), važno je razumjeti distribuciju iz koje se uzorkuje.

U situacijama u kojima vektor odražava vjerojatnosti, često će se koristiti uniformna distribucija pri kreiranju vektora. Pritom će biti potrebno definirati minimum i maksimum raspona u kojem se generiraju vrijednosti, a ako se žele generirati vrijednosti koje predstavljaju vjerojatnosti, onda će biti \(min=0\) i \(max=\). Osim toga, potrebno je odrediti koliko je brojeva potrebno kreirati.

unif <-runif(50,0,1)
unif
##  [1] 0.48331256 0.60349516 0.93669611 0.59114068 0.75661278 0.54615700
##  [7] 0.62166844 0.91558008 0.24120328 0.44001276 0.42986005 0.49557037
## [13] 0.17817383 0.46547265 0.78421479 0.64593645 0.91860995 0.06331807
## [19] 0.17195012 0.93590107 0.09913617 0.25713608 0.12324370 0.15333699
## [25] 0.74907103 0.19577685 0.78307283 0.20775900 0.06596940 0.08042107
## [31] 0.11996347 0.81233547 0.20134315 0.52868136 0.25829071 0.47925415
## [37] 0.11559737 0.35659784 0.76020189 0.52494210 0.27941473 0.08041231
## [43] 0.66948400 0.15473657 0.70518520 0.90612726 0.92157584 0.36940419
## [49] 0.62977001 0.90254762