Оператор доделе у R-у је <- (али може да се користи и =).
x <- 9
Покретање линије кода (RStudio): Ctrl+Enter
Постоји и оператор -> за доделу са друге стране.
9 -> x
Нумеричке вредности су подразумевано типа double (5/2 није целобројно дељење већ је једнако 2.5).
Елементарне функције: exp(), cos(), sin(), log(), ..
Аритметички оператори: +,-,*,/
Логички оператори: <=,>=, ==, !=, <,>, & , |, !
У 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
}
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
Индексирање вектора почиње од јединице.
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
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
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
Синтакса за писање функција
# 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