Основне функције

Рачунање израза:

4+4
(2*2)+1
5/0

Елементарне функције: exp(), cos(), sin(), tan(), log(), log10(), sqrt(),...

Аритметички оператори: +,-,*,/,...

Логички оператори: <=,>=, ==, !=, <,>, & , |, !,...

Ако нас занима више о некој функцији:

help(cos) # ili 
?cos
example(exp)

За покретање линије кода (за RStudio): \(Ctrl+Enter\)

Све од знака # до краја реда је КОМЕНТАР!

Променљиве

Подаци се у R чувају у променљивим. Приликом декларације променљиве не наводимо тип променљиве, већ јој само додељујемо вредност. Име променљиве може да садржи слова, бројеве и тачку, а битно је да почиње словом. R је case sensitive, дакле X!=x.

Оператор доделе у R-у је <-, али може да се користи и =.

x <- 9

Постоји и оператор -> за доделу са друге стране.

9 -> x

Нумеричке променљиве

Променљиве којима додељујемо неке нумеричке вредности. Нумеричке вредности су подразумевано типа double.

x <- 3 # isto sto i 3->x
x # ispisivanje vrednosti
## [1] 3

Овако декларисану променљиву можемо користити и у различитим изразима:

x+x
x+3
exp(x^2)

Променњиве типа character

променљиве које садрже неке стрингове

x <- "neke reci" 
x
## [1] "neke reci"

Логичке променњиве

променљиве логичког типа могу да имају вредности TRUE или FALSE (у R-у је исто што и T, F)

A <- TRUE 
A #ili
## [1] TRUE
A <- T 
A
## [1] TRUE

Логичке променљиве се добијају и као резултат релацијских израза:

3<4
3!=3
x <- (2<4)&(3==3)
x
## [1] TRUE

Провера типа података

is.numeric(x)
## [1] FALSE
is.character(x)
## [1] FALSE
is.logical(x)
## [1] TRUE

Вектори

Начини задавања вектора:

  1. функција COMBINE
v <- c(2,3,4,4)
v
## [1] 2 3 4 4
  1. задавањем почетног и крајњег елемента низа
v <- 1:30
v
##  [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
## [26] 26 27 28 29 30
  1. функција SEQUENCE

Задајемо почетни и крајњи елемент вектора ако желимо да се сваки следећи елемент увећа за 1.

v <- seq(5,25)
v
##  [1]  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

Ако желимо да корак буде различит од 1, наводимо корак као трећи аргумент функције seq(). За многе функције постоје опциони аргументи који ако се експлицитно не наведу у позиву функције, узимају неку default вредност. Овде је та вредност 1.

v <- seq(5,25,5)
v
## [1]  5 10 15 20 25
v <- seq(0,1,0.1)
v
##  [1] 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0

Ако желимо опадајући низ, ставимо да корак буде негативан.

v <- seq(10,1,-1)
v
##  [1] 10  9  8  7  6  5  4  3  2  1

Приступање елементима вектора

v[1]

Мењање вредности елемената вектора

v[2] <- 27
v
##  [1] 10 27  8  7  6  5  4  3  2  1

Додавање новог елемента на крај вектора

v[11] <- 0
v
##  [1] 10 27  8  7  6  5  4  3  2  1  0

Издвајање подвектора

Подвектор можемо издвојити навођењем индекса елемената које желимо да издвојимо.

v[1:3]
v[c(1,3)] # Podvektor koji sadrzi prvi i treci element

Фукнције скалара примењене на векторе

  • делују на сваки елемент вектора посебно
sin(v)
v+1
v/2

НАПОМЕНА: оператор : има већи приоритет од аритметичких операција

n <- 10
v1 <- 1:n-1
v1
##  [1] 0 1 2 3 4 5 6 7 8 9
v2 <- 1:(n-1)
v2
## [1] 1 2 3 4 5 6 7 8 9

Функције за рад са векторима

length(v)
max(v)
min(v)
range(v)
sort(v)
order(v)
sum(v)
mean(v) # uzoracka sredina
var(v) # popravljena uzoracka disperzija
sd(v) # standardna devijacija

Копија вектора помоћу функције rep() REPLICATE и варијанте ове функције

rep(v)
rep(v,5) # novi vektor koji sadrzi 5 nadovezanih kopija pocetnog, isto sto i rep(v,times=5)
rep(v,each=3) # kopira svaki element 3 puta uzastopno
rep(v,length.out=2) # kopira prva dva elementa

NA вредности - not available

v <- c(1,4,6,NA,23)
sum(v)

Ако желимо да функција игнорише NA вредности

sum(v,na.rm=T)
na.omit(v)

Вектори стрингова

v <- c("aaaa","c","bbb")
sort(v)

Логички вектори

  • добијају се као резултат релацијских израза са векторима
v <- c(2,6,3,7,8)
v==1:5 # Poredi svaki element vektora sa odgovarajucim
v>3 # Poredi svaki element sa 3

Операције између два вектора

a <- c(1,2,3,4)
b <- c(2,3,4,5)
r <- a/b
r
## [1] 0.5000000 0.6666667 0.7500000 0.8000000

Матрице

Матрице су дводимензиони вектори. Начини задавања матрица су:

  1. Матрицу правимо од елемената једнодимензионог вектора променом димензија
x <- 1:12
dim(x) <- c(3,4) # x je sada 2D vektor sa 3 vrste i 4 kolone
x
##      [,1] [,2] [,3] [,4]
## [1,]    1    4    7   10
## [2,]    2    5    8   11
## [3,]    3    6    9   12
  1. Матрицу формирамо помоћу функције matrix
x <- matrix(1:12, nrow=3) # nrow = broj vrsta matrice
x
##      [,1] [,2] [,3] [,4]
## [1,]    1    4    7   10
## [2,]    2    5    8   11
## [3,]    3    6    9   12
x <- matrix(1:12,ncol=4) # ncol = broj kolona
x
##      [,1] [,2] [,3] [,4]
## [1,]    1    4    7   10
## [2,]    2    5    8   11
## [3,]    3    6    9   12

Примећујемо да се при креирању матрице прво попуњава елементима прва колона, па друга, итд. Ако хоћемо да се матрица попуњава по колонама додамо параметар byrow.

x <- matrix(1:12,nrow=3,byrow=T)
x
##      [,1] [,2] [,3] [,4]
## [1,]    1    2    3    4
## [2,]    5    6    7    8
## [3,]    9   10   11   12
  1. Матрица се може добити налепљивањем вектора помоћу функција cbind (везује векторе као колоне матрице) и rbind(везује векторе као врсте матрице)
a <- 1:4
a
## [1] 1 2 3 4
b <- 5:8
b
## [1] 5 6 7 8
c <- 9:12
c
## [1]  9 10 11 12
M1 <- cbind(a,b,c)
M1
##      a b  c
## [1,] 1 5  9
## [2,] 2 6 10
## [3,] 3 7 11
## [4,] 4 8 12
M2 <- cbind(1:4,5:8,9:12) # skraceno
M2
##      [,1] [,2] [,3]
## [1,]    1    5    9
## [2,]    2    6   10
## [3,]    3    7   11
## [4,]    4    8   12
M3 <- rbind(1:4,5:8,9:12)
M3
##      [,1] [,2] [,3] [,4]
## [1,]    1    2    3    4
## [2,]    5    6    7    8
## [3,]    9   10   11   12
rownames(x) <- c('A','B','C')
u <- x[1,2]
u
## A 
## 2
v <- x[3,]
v
## [1]  9 10 11 12
w <- x[,4]
w
##  A  B  C 
##  4  8 12

Операције са матрицама

x <- matrix(c(2,5,3,7,5,1,7,4,3),ncol=3)
t(x) # Transponovana matrica
##      [,1] [,2] [,3]
## [1,]    2    5    3
## [2,]    7    5    1
## [3,]    7    4    3
diag(x) # Samo elementi sa dijagonale
## [1] 2 5 3
det(x) # Determinanta
## [1] -69
solve(x) # Inverzna matrica
##             [,1]       [,2]       [,3]
## [1,] -0.15942029  0.2028986  0.1014493
## [2,]  0.04347826  0.2173913 -0.3913043
## [3,]  0.14492754 -0.2753623  0.3623188
  • Множење матрица
a <- cbind(1:3,4:6,7:9)
b <- cbind(7:9,4:6,1:3)
a*b # Mnozenje elemenata sa istim indeksom
##      [,1] [,2] [,3]
## [1,]    7   16    7
## [2,]   16   25   16
## [3,]   27   36   27
a%*%b # Matricno mnozenje
##      [,1] [,2] [,3]
## [1,]  102   66   30
## [2,]  126   81   36
## [3,]  150   96   42
rowSums(x) # suma po redovima
## [1] 16 14  7
rowMeans(x) # srednja vrednosti po redovima
## [1] 5.333333 4.666667 2.333333
colSums(x) # suma po kolonama
## [1] 10 13 14
colMeans(x) # srednja vrednost po kolonama
## [1] 3.333333 4.333333 4.666667

Фактори

Фактори се користе када податке сврставамо у категорије. Сваки фактор има неколико категорија/нивоа (level). Најчешће се те категорије описују бројевима (0 - мушко, 1- женско).

pol <- c(0,0,1,0,1)
fpol <- factor(pol,levels=0:1) # pol posmatramo kao faktor, cije su moguce vrednosti 0 i 1
fpol
## [1] 0 0 1 0 1
## Levels: 0 1
levels(fpol) <- c("muski","zenski")# dodeljujemo znacenje levelima faktora
fpol
## [1] muski  muski  zenski muski  zenski
## Levels: muski zenski
levels(fpol)
## [1] "muski"  "zenski"
as.numeric(fpol) #prikazuje kako su leveli kodirani, uvek pocinje od 1 (1,2,..)
## [1] 1 1 2 1 2
bol <- c(0,3,2,2,1) # Pravimo vektor za 5 pacijenata, gde su elementi stepeni bola
fbol <- factor(bol,levels=0:3) # Pravimo faktor
levels(fbol) <- c("nema","slab","umeren","jak") # Dajemo imena levelima da bismo znali kako da interpretiramo brojeve
fbol
## [1] nema   jak    umeren umeren slab  
## Levels: nema slab umeren jak
as.numeric(fbol) # Dodelio je levelima 1,2,3,4
## [1] 1 4 3 3 2

Ако се изостави параметар levels=..., по default-у се прави фактор од сортираних вредности из вектора. То није увек препоручњиво, на пример ако је вектор стрингова, сортирање је по алфабету.

Базе података (матрица података)

База података (Data frame) је листа вектора исте дужине, таква да су елементи са истим индексом повезани. Подсећа на матрицу у којој су у једној врсти подаци о једном елементу узорка (субјекту у експерименту). Имена врста су јединствена и по томе се елементи разликују.

brojevi <- 1:12
slova <- letters[1:12]
d <- data.frame(brojevi,slova)
d
##    brojevi slova
## 1        1     a
## 2        2     b
## 3        3     c
## 4        4     d
## 5        5     e
## 6        6     f
## 7        7     g
## 8        8     h
## 9        9     i
## 10      10     j
## 11      11     k
## 12      12     l
d$brojevi
##  [1]  1  2  3  4  5  6  7  8  9 10 11 12
d$slova
##  [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l"
d <- data.frame(br=brojevi,sl=slova)
d
##    br sl
## 1   1  a
## 2   2  b
## 3   3  c
## 4   4  d
## 5   5  e
## 6   6  f
## 7   7  g
## 8   8  h
## 9   9  i
## 10 10  j
## 11 11  k
## 12 12  l
names(d) <- c("kol1","kol2")
d
##    kol1 kol2
## 1     1    a
## 2     2    b
## 3     3    c
## 4     4    d
## 5     5    e
## 6     6    f
## 7     7    g
## 8     8    h
## 9     9    i
## 10   10    j
## 11   11    k
## 12   12    l
d$kol1
##  [1]  1  2  3  4  5  6  7  8  9 10 11 12
d$kol2
##  [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l"

Функција attach

Функција attach примењена на базу података омогућава нам да приступамо елементима без навођења имена базе. За поништавање функције attach користи се функција detach.

attach(d)
kol1
##  [1]  1  2  3  4  5  6  7  8  9 10 11 12
kol2
##  [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l"
detach(d)

Индексирање база података

Из базе података можемо извући податке преко $ или преко матричне репрезентације.

d
##    kol1 kol2
## 1     1    a
## 2     2    b
## 3     3    c
## 4     4    d
## 5     5    e
## 6     6    f
## 7     7    g
## 8     8    h
## 9     9    i
## 10   10    j
## 11   11    k
## 12   12    l
d[1, 2] # ili d$kol2[1]
## [1] "a"
d[1, ] #vraca prvu vrstu
##   kol1 kol2
## 1    1    a
d[ , 1] # vraca prvu kolonu
##  [1]  1  2  3  4  5  6  7  8  9 10 11 12
d[1] # vraca data frame koji sadzi prvu kolonu d
##    kol1
## 1     1
## 2     2
## 3     3
## 4     4
## 5     5
## 6     6
## 7     7
## 8     8
## 9     9
## 10   10
## 11   11
## 12   12
  • Условна селекција у бази података
d[d$kol1 < 10,] # Baza podatakа koja sadrzi vrednost <10 u prvoj koloni
##   kol1 kol2
## 1    1    a
## 2    2    b
## 3    3    c
## 4    4    d
## 5    5    e
## 6    6    f
## 7    7    g
## 8    8    h
## 9    9    i
d[d$kol1 < 10 & d$kol1%%2 == 0,]# + parne vrednosti
##   kol1 kol2
## 2    2    b
## 4    4    d
## 6    6    f
## 8    8    h

Додавање вектора у базу података

У R-у постоје уграђене базе, као на пример sleep.

data(sleep) #ucitava bazu sleep u tekuci session u R-u
sleep #ispisuje
##    extra group ID
## 1    0.7     1  1
## 2   -1.6     1  2
## 3   -0.2     1  3
## 4   -1.2     1  4
## 5   -0.1     1  5
## 6    3.4     1  6
## 7    3.7     1  7
## 8    0.8     1  8
## 9    0.0     1  9
## 10   2.0     1 10
## 11   1.9     2  1
## 12   0.8     2  2
## 13   1.1     2  3
## 14   0.1     2  4
## 15  -0.1     2  5
## 16   4.4     2  6
## 17   5.5     2  7
## 18   1.6     2  8
## 19   4.6     2  9
## 20   3.4     2 10
cbind(sleep, seq(20,1,-1)) # Dodajemo kolonu brojeva 20,19,18,...1
##    extra group ID seq(20, 1, -1)
## 1    0.7     1  1             20
## 2   -1.6     1  2             19
## 3   -0.2     1  3             18
## 4   -1.2     1  4             17
## 5   -0.1     1  5             16
## 6    3.4     1  6             15
## 7    3.7     1  7             14
## 8    0.8     1  8             13
## 9    0.0     1  9             12
## 10   2.0     1 10             11
## 11   1.9     2  1             10
## 12   0.8     2  2              9
## 13   1.1     2  3              8
## 14   0.1     2  4              7
## 15  -0.1     2  5              6
## 16   4.4     2  6              5
## 17   5.5     2  7              4
## 18   1.6     2  8              3
## 19   4.6     2  9              2
## 20   3.4     2 10              1
rbind(sleep, c(2.0,1,1)) # isto tako mozemo dodati i vrstu
##    extra group ID
## 1    0.7     1  1
## 2   -1.6     1  2
## 3   -0.2     1  3
## 4   -1.2     1  4
## 5   -0.1     1  5
## 6    3.4     1  6
## 7    3.7     1  7
## 8    0.8     1  8
## 9    0.0     1  9
## 10   2.0     1 10
## 11   1.9     2  1
## 12   0.8     2  2
## 13   1.1     2  3
## 14   0.1     2  4
## 15  -0.1     2  5
## 16   4.4     2  6
## 17   5.5     2  7
## 18   1.6     2  8
## 19   4.6     2  9
## 20   3.4     2 10
## 21   2.0     1  1
  • Ако хоћемо да трансформишемо неку од колона користимо функцију transform.
transform(sleep, abs.extra = abs(extra)) # U novoj koloni abs.extra da nam ispisuje aps. vrednosti kolone extra
##    extra group ID abs.extra
## 1    0.7     1  1       0.7
## 2   -1.6     1  2       1.6
## 3   -0.2     1  3       0.2
## 4   -1.2     1  4       1.2
## 5   -0.1     1  5       0.1
## 6    3.4     1  6       3.4
## 7    3.7     1  7       3.7
## 8    0.8     1  8       0.8
## 9    0.0     1  9       0.0
## 10   2.0     1 10       2.0
## 11   1.9     2  1       1.9
## 12   0.8     2  2       0.8
## 13   1.1     2  3       1.1
## 14   0.1     2  4       0.1
## 15  -0.1     2  5       0.1
## 16   4.4     2  6       4.4
## 17   5.5     2  7       5.5
## 18   1.6     2  8       1.6
## 19   4.6     2  9       4.6
## 20   3.4     2 10       3.4
  • За приказ уопштених података о бази користимо функцију summary.
data(InsectSprays) # Jos jedna ugradjena baza - InsectSprays
InsectSprays
##    count spray
## 1     10     A
## 2      7     A
## 3     20     A
## 4     14     A
## 5     14     A
## 6     12     A
## 7     10     A
## 8     23     A
## 9     17     A
## 10    20     A
## 11    14     A
## 12    13     A
## 13    11     B
## 14    17     B
## 15    21     B
## 16    11     B
## 17    16     B
## 18    14     B
## 19    17     B
## 20    17     B
## 21    19     B
## 22    21     B
## 23     7     B
## 24    13     B
## 25     0     C
## 26     1     C
## 27     7     C
## 28     2     C
## 29     3     C
## 30     1     C
## 31     2     C
## 32     1     C
## 33     3     C
## 34     0     C
## 35     1     C
## 36     4     C
## 37     3     D
## 38     5     D
## 39    12     D
## 40     6     D
## 41     4     D
## 42     3     D
## 43     5     D
## 44     5     D
## 45     5     D
## 46     5     D
## 47     2     D
## 48     4     D
## 49     3     E
## 50     5     E
## 51     3     E
## 52     5     E
## 53     3     E
## 54     6     E
## 55     1     E
## 56     1     E
## 57     3     E
## 58     2     E
## 59     6     E
## 60     4     E
## 61    11     F
## 62     9     F
## 63    15     F
## 64    22     F
## 65    15     F
## 66    16     F
## 67    13     F
## 68    10     F
## 69    26     F
## 70    26     F
## 71    24     F
## 72    13     F
summary(InsectSprays)
##      count       spray 
##  Min.   : 0.00   A:12  
##  1st Qu.: 3.00   B:12  
##  Median : 7.00   C:12  
##  Mean   : 9.50   D:12  
##  3rd Qu.:14.25   E:12  
##  Max.   :26.00   F:12
  • Испис првих 6 редова (обично се користи за веће базе)
head(InsectSprays) # Primetimo da ne moramo da navodimo InsectSprays$spray,vec samo ime kolone
##   count spray
## 1    10     A
## 2     7     A
## 3    20     A
## 4    14     A
## 5    14     A
## 6    12     A

Учитавање података

Прво правимо текстуални фајл са табелом. На пример, копирамо део базе cars у неки фајл. Треба водити рачуна да working directory буде локација где је фајл или у позиву функције навести целу путању.

cars
##    speed dist
## 1      4    2
## 2      4   10
## 3      7    4
## 4      7   22
## 5      8   16
## 6      9   10
## 7     10   18
## 8     10   26
## 9     10   34
## 10    11   17
## 11    11   28
## 12    12   14
## 13    12   20
## 14    12   24
## 15    12   28
## 16    13   26
## 17    13   34
## 18    13   34
## 19    13   46
## 20    14   26
## 21    14   36
## 22    14   60
## 23    14   80
## 24    15   20
## 25    15   26
## 26    15   54
## 27    16   32
## 28    16   40
## 29    17   32
## 30    17   40
## 31    17   50
## 32    18   42
## 33    18   56
## 34    18   76
## 35    18   84
## 36    19   36
## 37    19   46
## 38    19   68
## 39    20   32
## 40    20   48
## 41    20   52
## 42    20   56
## 43    20   64
## 44    22   66
## 45    23   54
## 46    24   70
## 47    24   92
## 48    24   93
## 49    24  120
## 50    25   85
baza <- read.table("cars.txt", header = T)
head(baza) 
##   speed dist
## 1     4    2
## 2     4   10
## 3     7    4
## 4     7   22
## 5     8   16
## 6     9   10

Функција read.table подразумева да је сепаратор празно поље. Ако хоћемо да сепаратор буде зарез користимо функцију read.csv, а ако хоћемо да сепаратор буде TAB, тада користимо функцију read.delim.

read.csv("cars_zarezi.txt", header = T)
##     X speed dist
## 1   1     4    2
## 2   2     4   10
## 3   3     7    4
## 4   4     7   22
## 5   5     8   16
## 6   6     9   10
## 7   7    10   18
## 8   8    10   26
## 9   9    10   34
## 10 10    11   17
## 11 11    11   28
## 12 12    12   14
## 13 13    12   20
## 14 14    12   24
## 15 15    12   28
write.table(baza, "fajl1.txt", sep = "\t")
write.table(baza, "fajl2.txt", sep = "   SEPARATOR   ")

Користи се за учтавање података: scan(file,what,nmax,sep), где је what тип података, nmax је максималан број карактера који хоћемо да учитамо, а sep је сепаратор.

s <- scan("cars.txt", what = character(), nmax = 30) # Skeniracemo tekstualni fajl cars.txt
is.vector(s) # Dobija se vektor sa skeniranim podacima
## [1] TRUE

Генерално, за писање у фајл: write(podaci,"fajl",ncolumns=...,append=T/F,sep=" ")

x <- 1:120
write(x, "fajl.txt", sep= " ", ncolumns = 12)

Пакети

Пакет је колекција R- функција, које се односе на један појам, повезани су. На пример, пакет за графику, пакет функција и база за линеарну регресију, пакет узорака из неког истраживања,…

Поступак за инсталирање пакета је install.packages("ime_paketa"), пакет се инсталира директно са нета или скинути пакет у zip формату са сајта, па tools--install packages---.

Када је пакет инсталиран учитава се са library(ime_paketa) и тада су нам на располагању његове функције, базе података и остало.

На пример, пакет PASWR (paket probability and statistics with R) садржи корисне функције и базе података за вероватноћу и статистику.

# install.packages("PASWR")
library(PASWR) 
## Warning: package 'PASWR' was built under R version 4.1.3
## Loading required package: lattice
data(Aggression) # kada je paket ucitan bazu ucitavamo sa data(BAZA)
Aggression
##    violence noviolence
## 1        35         26
## 2        30         28
## 3        15         16
## 4        20         16
## 5        25         16
## 6        14         16
## 7        37         32
## 8        26         24
## 9        36         30
## 10       40         33
## 11       35         20
## 12       20         19
## 13       16         19
## 14       21         10
## 15       17          7
## 16       15         17

Ако нећемо да учитамо цео пакет, можемо учитати само неку од база без претходног позива library.

data(Aggression, package = "PASWR")

У овом пакету има и корисних статистичких тестова.

detach("package:PASWR")
# help(datasets)
data(airquality)# Odavde vidimo imena baza, jedna od njih sadrzi podatke o vazduhu iz Njujorka
head(airquality)
##   Ozone Solar.R Wind Temp Month Day
## 1    41     190  7.4   67     5   1
## 2    36     118  8.0   72     5   2
## 3    12     149 12.6   74     5   3
## 4    18     313 11.5   62     5   4
## 5    NA      NA 14.3   56     5   5
## 6    28      NA 14.9   66     5   6

Функције

У R -у се функција дефинише на следећи начин: IME_FJE<-function(arg1,arg2,arg3,...) {TELO FUNKCIJE}.

Функција се позива са IME_FJE(arg1,arg2,...) са конкретним аргументима.

Ако желимо да видимо код постојећих функција, куцамо само име функције без аргумената.

factorial
## function (x) 
## gamma(x + 1)
## <bytecode: 0x0000000020906300>
## <environment: namespace:base>
binomni <- function(n,k){
  koef<-factorial(n)/(factorial(k)*factorial(n-k))
  return(koef)
}

Позив финкције је

binomni(4,2)
## [1] 6

Када позивамо функцију, аргументе наводимо истим редом као у дефиницији функције, осим ако их наведемо по имену. Тада је редослед произвољан.

binomni(k=2,n=4)
## [1] 6
spoji<-function(v1,v2){
  return (cbind(v1,v2))
}
# Poziv
spoji(c(0,1,2,3),seq(0,3,1))
##      v1 v2
## [1,]  0  0
## [2,]  1  1
## [3,]  2  2
## [4,]  3  3

Функција не мора да садржи RETURN наредбу, може само да се направе неке измене које важе само у телу функције.

SQ<-function(x){
  x<-x^2
}
a<-3
SQ(a)
a # nije se izmenilo van funkcije
## [1] 3

FOR, WHILE, REPEAT и IF наредбе:

Било која целина или блок наредби може се издвојити заградама \(\{ \}\). Ако у конзоли пређемо у нови ред, а траје блок, појавиће се + да то означи.

IF наредба

if(logicki_izraz) наредбе које се извршавају или if(logicki_izraz) наредбе else наредбе

a
## [1] 3
if(a>3) a<-a-3 else a<-0
a
## [1] 0
a<-2
b<-3
c<-4
if(a<b && b<c)
  y<-a*b*c else
    y<-0

Наредбе могу да буду и сложене, само би се онда ограничиле са \(\{\}\).

FOR петља

for(brojac in start:finish) {naredbe}

for (i in 1:10) print(i)
## [1] 1
## [1] 2
## [1] 3
## [1] 4
## [1] 5
## [1] 6
## [1] 7
## [1] 8
## [1] 9
## [1] 10

Хоћемо да направимо матрицу \(5\times 4\), где је \(a_{i,j}=i+j\),

a<-matrix(nrow=5,ncol=4) # Prazna matrica
a
##      [,1] [,2] [,3] [,4]
## [1,]   NA   NA   NA   NA
## [2,]   NA   NA   NA   NA
## [3,]   NA   NA   NA   NA
## [4,]   NA   NA   NA   NA
## [5,]   NA   NA   NA   NA
# for petlje jedna u drugoj
for(i in 1:5)
  for(j in 1:4)
    a[i,j]<-i+j
a
##      [,1] [,2] [,3] [,4]
## [1,]    2    3    4    5
## [2,]    3    4    5    6
## [3,]    4    5    6    7
## [4,]    5    6    7    8
## [5,]    6    7    8    9

WHILE петља

while (uslov) {naredbe}

x<-1
while(x<=5){
  x<-x+1
}
x
## [1] 6

REPEAT наредба

Садржи наредбе које се извршавају, као и услов за излазак из петље, иначе имамо бесконачну петљу!

repeat{naredbe if (uslov) break}

y<-0
repeat{
  y<-y+1
  if(y>=5) break
}
y
## [1] 5