Обавезе:
- писмени део испита састоји се од 3 теста (10+15+15 поена), по један након сваке од тематских целина, при чему је могуће надокнадити један, два или целокупно градиво обухваћено тестовима у испитном року Јануар 1,
- семинарски рад који вреди 60 поена.
Литература:
- W. N. Venables, D. M. Smith, An Introduction to R.
- A Krause, M. Olson, The basics of S-PLUS, Springer, New York, 2005.
- Peter Dalgaard, Introductory Statistics with R, Springer - Verlag, New York, 2002.
- John M.Chambers, Software for Data Analysis: Programming with R, Springer - Verlag, New York, 2008.
Додатна литерaтура
- Patrick Burns, R Inferno, [https://www.burns-stat.com/pages/Tutor/R_inferno.pdf]
- Hadley Wickham, Advanced R, [https://adv-r.hadley.nz/]
R и RStudio
- Линк за преузимање R [https://cran.r-project.org/]
- Линк за преузимање Rstudio [https://posit.co/products/open-source/rstudio/]
Основне функције
Рачунање израза:
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.
- Основни типови података су:
numerical, character, logical, вектори, матрице, фактори, базе података. - Специјални типови података су:
missing values, NULL, NaN, - / + Inf
Оператор доделе у R-у је <- или ->,
али може да се користи и оператор =.
Нумеричке променљиве
Променљиве којима додељујемо неке нумеричке вредности. Нумеричке вредности су подразумевано типа double.
## [1] 3
Овако декларисану променљиву можемо користити и различитим изразима:
x+x
x+3
exp(x^2)
Променњиве типа character
Променњиве типа character су променљиве које садрже неке стрингове.
## [1] "promenljiva"
Логичке променњиве
Променљиве логичког типа могу да имају вредности TRUE или FALSE (или краће исто што и T или F, редом).
## [1] TRUE
## [1] TRUE
Логичке променњљиве се добијају и као резултат релацијских израза:
3 < 4
3 != 3
## [1] FALSE
## [1] "promenljiva"
Провера типа података
is.numeric(x)
is.character(x)
is.logical(x)
Вектори
- начин представљања низова у R-у
- индексирање почиње од 1
Начини задавања вектора:
- функција COMBINE
v <- c(10.4, 5.6, 3.1, 6.4, 21.7)
# c(10.4, 5.6, 3.1, 6.4, 21.7) -> v
# assign("v", c(10.4, 5.6, 3.1, 6.4, 21.7))
v## [1] 10.4 5.6 3.1 6.4 21.7
- задавањем почетног и крајњег елемента низа
## [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
- функција SEQUENCE
Задајемо почетни и крајњи елемент вектора ако желиммо да се сваки следећи елемент увећа за 1.
## [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.
## [1] 5 10 15 20 25
## [1] 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0
## [1] -5.0 -4.8 -4.6 -4.4 -4.2 -4.0 -3.8 -3.6 -3.4 -3.2 -3.0 -2.8 -2.6 -2.4 -2.2
## [16] -2.0 -1.8 -1.6 -1.4 -1.2 -1.0 -0.8 -0.6 -0.4 -0.2 0.0 0.2 0.4 0.6 0.8
## [31] 1.0 1.2 1.4 1.6 1.8 2.0 2.2 2.4 2.6 2.8 3.0 3.2 3.4 3.6 3.8
## [46] 4.0 4.2 4.4 4.6 4.8 5.0
Ако желимо опадајући низ, ставимо да корак буде негативан.
## [1] 10 9 8 7 6 5 4 3 2 1
Приступање елементима вектора
v[1]
Издвајање подвектора
Подвектор можемо издвојити навођењем индекса елемената које желимо да издвојимо.
## [1] 10 27 8
## [1] 10 8
Фукнције скалара примењене на векторе
- делују на сваки елемент вектора посебно
## [1] 2.202647e+04 5.320482e+11 2.980958e+03 1.096633e+03 4.034288e+02
## [6] 1.484132e+02 5.459815e+01 2.008554e+01 7.389056e+00 2.718282e+00
## [11] 1.000000e+00
## [1] 11 28 9 8 7 6 5 4 3 2 1
## [1] 5.0 13.5 4.0 3.5 3.0 2.5 2.0 1.5 1.0 0.5 0.0
НАПОМЕНА: оператор : има већи приоритет од аритметичких
операција
## [1] 0 1 2 3 4 5 6 7 8 9
## [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 и
варијанте ове функције
## [1] 10 27 8 7 6 5 4 3 2 1 0
## [1] 10 27 8 7 6 5 4 3 2 1 0 10 27 8 7 6 5 4 3 2 1 0 10 27 8
## [26] 7 6 5 4 3 2 1 0 10 27 8 7 6 5 4 3 2 1 0 10 27 8 7 6 5
## [51] 4 3 2 1 0
## [1] 10 10 10 27 27 27 8 8 8 7 7 7 6 6 6 5 5 5 4 4 4 3 3 3 2
## [26] 2 2 1 1 1 0 0 0
## [1] 10 27
NA вредности - not available
## [1] NA
Ако желимо да функција игнорише NA вредности
## [1] 34
Логички вектори
- добијају се као резултат релацијских израза са векторима
## [1] FALSE FALSE TRUE FALSE FALSE
## [1] FALSE TRUE FALSE TRUE TRUE
Радни простор и резервисање меморије
- Све текуће променњиве су смештене у workspace-у
## [1] "a" "b" "n" "r" "temp" "v" "v1" "v2" "v3" "x"
- Ако желимо да обришемо неку
- Брисање свих објеката
Матрице
Матрице су дводимензиони вектори. Начини задавања матрица су:
- Матрицу правимо од елемената једнодимензионог вектора променом димензија
## [,1] [,2] [,3] [,4]
## [1,] 1 4 7 10
## [2,] 2 5 8 11
## [3,] 3 6 9 12
- Матрицу формирамо помоћу функције
matrix
## [,1] [,2] [,3] [,4]
## [1,] 1 4 7 10
## [2,] 2 5 8 11
## [3,] 3 6 9 12
## [,1] [,2] [,3] [,4]
## [1,] 1 4 7 10
## [2,] 2 5 8 11
## [3,] 3 6 9 12
Примећујемо да се при креирању матрице прво попуњава елементима прва
колона, па друга, итд. Ако хоћемо да се матрица попуњава по колонама
додамо параметар byrow.
## [,1] [,2] [,3] [,4]
## [1,] 1 2 3 4
## [2,] 5 6 7 8
## [3,] 9 10 11 12
- Матрица се може добити налепљивањем вектора помоћу функција
cbind(везује векторе као колоне матрице) иrbind(везује векторе као врсте матрице)
## [1] 1 2 3 4
## [1] 5 6 7 8
## [1] 9 10 11 12
## a b c
## [1,] 1 5 9
## [2,] 2 6 10
## [3,] 3 7 11
## [4,] 4 8 12
## [,1] [,2] [,3]
## [1,] 1 5 9
## [2,] 2 6 10
## [3,] 3 7 11
## [4,] 4 8 12
## [,1] [,2] [,3] [,4]
## [1,] 1 2 3 4
## [2,] 5 6 7 8
## [3,] 9 10 11 12
- Давање имена колонама и врстама матрице помоћу функција
colnamesиrownames
## [,1] [,2] [,3] [,4]
## A 1 2 3 4
## B 5 6 7 8
## C 9 10 11 12
НАПОМЕНА: У R-у постоји уграђен вектор који садржи слова алфабета.
## [1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O" "P" "Q" "R" "S"
## [20] "T" "U" "V" "W" "X" "Y" "Z"
## [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s"
## [20] "t" "u" "v" "w" "x" "y" "z"
Претходна команда може да изгледа и овако:
## [,1] [,2] [,3] [,4]
## A 1 2 3 4
## B 5 6 7 8
## C 9 10 11 12
Још неки уграђени вектори за имена врста и колона матрица:
month.name
month.abb
- Приступање елементима матрице
## A
## 2
## [1] 9 10 11 12
## A B C
## 4 8 12
Операције са матрицама
## [,1] [,2] [,3]
## [1,] 2 5 3
## [2,] 7 5 1
## [3,] 7 4 3
## [1] 2 5 3
## [1] -69
## [,1] [,2] [,3]
## [1,] -0.15942029 0.2028986 0.1014493
## [2,] 0.04347826 0.2173913 -0.3913043
## [3,] 0.14492754 -0.2753623 0.3623188
- Множење матрица
## [,1] [,2] [,3]
## [1,] 7 16 7
## [2,] 16 25 16
## [3,] 27 36 27
## [,1] [,2] [,3]
## [1,] 102 66 30
## [2,] 126 81 36
## [3,] 150 96 42
## [1] 16 14 7
## [1] 5.333333 4.666667 2.333333
## [1] 10 13 14
## [1] 3.333333 4.333333 4.666667
Фактори
Фактори се користе када податке сврставамо у категорије. Сваки фактор има неколико категорија/нивоа (level). Најчешће се те категорије описују бројевима (0 - мушко, 1- женско).
- Пример 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
## [1] muski muski zenski muski zenski
## Levels: muski zenski
## [1] "muski" "zenski"
## [1] 1 1 2 1 2
- Пример 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
## [1] 1 4 3 3 2
Ако се изостави параметар levels=..., по default-у се
прави фактор од сортираних вредности из вектора. То није увек
препоручњиво, на пример ако је вектор стрингова, сортирање је по
алфабету.
Листе
Листе су колекција објеката сакупљена у један сложен објекат.
Пример прављења листе од два вектора.
## [[1]]
## [1] 4 3 2 1
##
## [[2]]
## [1] 5 6 7 8
- Приступање елементима листе
## [1] 4 3 2 1
## [1] 3
Ако приликом прављења листе елементима доделимо имена, елементе листе
можемо позвати и преко њихових имена и знака $.
## [1] 4 3 2 1
## [1] 4 3 2 1
## [1] 4 3 2 1
- Функција која враћа имена елемената
## [1] "prvi" "drugi"
НАПОМЕНА: Елементи листе не морају бити објекти истог типа!!!
## [[1]]
## [1] 2
##
## [[2]]
## [1] 1.4
##
## [[3]]
## [1] "string"
##
## [[4]]
## [1] 1 3 4
##
## [[5]]
## [1] 2 3 4 5 6 7 8 9 10 11 12
##
## [[6]]
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 1 3 5 7 9 11
## [2,] 2 4 6 8 10 12
## [[1]]
## [[1]][[1]]
## [1] 2
##
## [[1]][[2]]
## [1] 1.4
##
## [[1]][[3]]
## [1] "string"
##
## [[1]][[4]]
## [1] 1 3 4
##
## [[1]][[5]]
## [1] 2 3 4 5 6 7 8 9 10 11 12
##
## [[1]][[6]]
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 1 3 5 7 9 11
## [2,] 2 4 6 8 10 12
##
##
## [[2]]
## [1] 12
##
## [[3]]
## [1] "rec"
- Додавање елемената на крај листе
## [[1]]
## [1] 1 2 3
##
## [[2]]
## [,1] [,2]
## [1,] 1 3
## [2,] 2 4
lista[[3]] <- "treci" # Dodavanje preko indeksa
# Moguce je dodati novi element i preko imena
lista$cetvrti <- "cet"
lista # Samo cetvrti element liste ima ime i dodat je na kraj liste## [[1]]
## [1] 1 2 3
##
## [[2]]
## [,1] [,2]
## [1,] 1 3
## [2,] 2 4
##
## [[3]]
## [1] "treci"
##
## $cetvrti
## [1] "cet"
- Брисање елемената листе
## [[1]]
## [,1] [,2]
## [1,] 1 3
## [2,] 2 4
##
## [[2]]
## [1] "treci"
##
## $cetvrti
## [1] "cet"
## [[1]]
## [1] 1 2 3
##
## [[2]]
## [,1] [,2]
## [1,] 1 3
## [2,] 2 4
##
## $cetvrti
## [1] "cet"
## [[1]]
## [1] 1 2 3
##
## [[2]]
## [,1] [,2]
## [1,] 1 3
## [2,] 2 4
##
## $cetvrti
## [1] "cet"