подсећање, I део

\(\color{lightseagreen}{\text{1. Декларација променљиве}}\)

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

x <- 9    

Покретање линије кода (RStudio): Ctrl+Enter
Постоји и оператор -> за доделу са друге стране.

9 -> x

Нумеричке вредности су подразумевано типа double (5/2 није целобројно дељење већ је једнако 2.5).

Елементарне функције: exp(), cos(), sin(), log(), ..
Аритметички оператори: +,-,*,/
Логички оператори: <=,>=, ==, !=, <,>, & , |, !


\(\color{lightseagreen}{\text{2. Вектори}}\)

У R-у постоји мноштво функција за рад са векторима.

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

numeric.vec <- c(1, 10, 49)
character.vec <- c("a", "b", "c")
boolean.vec <- c(TRUE, FALSE)

vec <- rep(0, 10)
vec <- rep(c(1, 2, 3), 3)

vec <- seq(1, 5)
vec <- seq(0, 1, 0.1)
vec <- seq(9, 1, -1)
vec <- seq(1, 5, length.out = 4)

vec <- 1:9

for петља

vec <- numeric(10)

for (i in 1:10) {
vec[i] <- i ^ 2

}

\(\color{lightseagreen}{\text{2.1. Операције са векторима}}\)

a <- 1:5
b <- c(3, 4, 5, 6, 7)

Аритметичке операције

5 * a
## [1]  5 10 15 20 25
a + b
## [1]  4  6  8 10 12
a - b
## [1] -2 -2 -2 -2 -2
a * b
## [1]  3  8 15 24 35
a / b
## [1] 0.3333333 0.5000000 0.6000000 0.6666667 0.7142857

Логичке операције

a == b
## [1] FALSE FALSE FALSE FALSE FALSE
a > b
## [1] FALSE FALSE FALSE FALSE FALSE
a <= 5
## [1] TRUE TRUE TRUE TRUE TRUE

За поређење два вектора:

all(a == b)
## [1] FALSE
all(a == a)
## [1] TRUE

У случају када два вектора нису исте дужине, вредности краћег се понављају циклично, док се не добије дужина дужег вектора.

u<-c(10, 20, 30) 
v<-c(1, 2, 3, 4, 5, 6, 7, 8, 9) 
u + v 
## [1] 11 22 33 14 25 36 17 28 39

Фукнкције у R-у су векторске (примењује се на сваки члан вектора).

cos(a)
## [1]  0.5403023 -0.4161468 -0.9899925 -0.6536436  0.2836622
log(a)
## [1] 0.0000000 0.6931472 1.0986123 1.3862944 1.6094379

\(\color{lightseagreen}{\text{2.2. Приступање елементима вектора}}\)

Индексирање вектора почиње од јединице.

v[3]  # елемент на  3. позицији у вектору v
## [1] 3

Могу се издвојити и цели вектори.

v[c(1, 2)]
## [1] 1 2
v[c(3, 4, 5)]
## [1] 3 4 5
v[2:4]
## [1] 2 3 4
v[c(2, 1, 3)]
## [1] 2 1 3

У случају да је потребно избацити елемент из вектора, потребно је додати негативан предзнак на број позиције елемента у вектору.

v[-4]
## [1] 1 2 3 5 6 7 8 9
v[-c(5, 7)]
## [1] 1 2 3 4 6 8 9
v[-(1:3)]  # Напомена: ":" има мањи приоритет од аритметичких операција 
## [1] 4 5 6 7 8 9

Условна селекција - желимо да издвојимо елементе вектора који испуњавају неки услов

a<-c(12,4,5,7,34,1,98)
a[a>7]
## [1] 12 34 98

Објашњење

a>7 враћа вектор логичких вредности, а затим a[a>7] приказује оне елементе из а за које је индекс T.

Нови вектор се може издвојити из датог вектора уз помоћ вектора са логичким вредностима који је исте дужине као оригинални, постављањем вредности TRUE (или T) на позиције елемената који треба да буду издвојени из почетног вектора, односно FALSE (или F) у супротном.

s <- c("a", "b", "c", "d")
l <- c(T, F, T, F)
s[l]
## [1] "a" "c"

На овај начин је могуће избацити NA вредности из вектора:

#користи се функција IS.NA:
a<-c(1,2,NA)
is.na(a)
## [1] FALSE FALSE  TRUE
a[!is.na(a)]
## [1] 1 2

Уместо is.na се не може користити a==NA, зато што је резултат поређења са непознатом веродношћу непозната вредност!

Елементима вектора се могу доделити имена.

v <- c("Ivo", "Andric")
names(v) <- c("Ime", "Prezime")
v
##      Ime  Prezime 
##    "Ivo" "Andric"

Могуће је приступити елементима вектора по имену.

v["Ime"]
##   Ime 
## "Ivo"

Наредна функција обрће редослед елемената у вектору.

vec
##  [1]   1   4   9  16  25  36  49  64  81 100
vec <- rev(vec)
vec
##  [1] 100  81  64  49  36  25  16   9   4   1

Сортирање

sort(vec)
##  [1]   1   4   9  16  25  36  49  64  81 100
sort(vec, decreasing = TRUE)
##  [1] 100  81  64  49  36  25  16   9   4   1

\(\color{lightseagreen}{\text{2.3. Измене у вектору}}\)

vec[2] <- 0
vec
##  [1] 100   0  64  49  36  25  16   9   4   1
vec[vec < 5] <- 1
vec
##  [1] 100   1  64  49  36  25  16   9   1   1
vec <- vec[1:4]
vec
## [1] 100   1  64  49

\(\color{lightseagreen}{\text{3. Матрице}}\)

M <- matrix( 
    c(2, 4, 3, 1, 5, 7), 
    nrow=2,              
    ncol=3,              
    byrow = TRUE)   # попуњавање матрице по редовима (по default-у је по колонама)
M
##      [,1] [,2] [,3]
## [1,]    2    4    3
## [2,]    1    5    7
M[2,3]      
## [1] 7
M[2,]       # други ред
## [1] 1 5 7
M[,3]       # трећа колона 
## [1] 3 7
M[, c(1,2)] 
##      [,1] [,2]
## [1,]    2    4
## [2,]    1    5

\(\color{lightseagreen}{\text{4. Функције}}\)

Синтакса за писање функција

# func.name<- function (argument) {
  
#         statement
# }

function је резервисана реч за декларацију функције. Изрази у оквиру витичастих заграда чине тело функције (заграде се не морају писати у колико тело функције садржи само један израз). Креирана функција се позива са func.name(argumenti).

Примери

pow <- function(x, y) {
  
  result <- x^y

  print(paste(x,"na stepen", y, "je", result))

  }

Ако желимо да функција има повратну вредност:

pow2 <- function(x, y) {
  
  result <- x^y
  
  result  #  return(result)
  
}

позив функције:

pow(2,3)
## [1] "2 na stepen 3 je 8"
pow2(2,3)
## [1] 8

или:

pow(x = 2, y = 3)
## [1] "2 na stepen 3 je 8"
pow(y = 3, x = 2)  #у овом случају није битан редослед навођења аргумената
## [1] "2 na stepen 3 je 8"

if/else

x <- 5
if (x %% 2 == 0) {
print("x je paran")
} else
print("x je neparan")
## [1] "x je neparan"

или у једној линији кода:

ifelse(x %% 2 == 0, print("x je paran"), print("x je neparan"))
## [1] "x je neparan"
## [1] "x je neparan"

Важне статистике

sum(vec)   # збир
## [1] 214
min(vec)   # x_(1)
## [1] 1
max(vec)   # x_(n)
## [1] 100
range(vec) # x_(1) , x_(n)
## [1]   1 100
mean(vec)  # узорачка средина
## [1] 53.5
var(vec)   # поправљена узорачка дисперзија
## [1] 1683
sd(vec)    # стандардно одступање (sqrt(var(x)))
## [1] 41.02438