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

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

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

factorial
## function (x) 
## gamma(x + 1)
## <bytecode: 0x0000000013246678>
## <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
a <- SQ(a)
a
## [1] 9
colors() #sve postojece boje u R-u
##   [1] "white"                "aliceblue"            "antiquewhite"        
##   [4] "antiquewhite1"        "antiquewhite2"        "antiquewhite3"       
##   [7] "antiquewhite4"        "aquamarine"           "aquamarine1"         
##  [10] "aquamarine2"          "aquamarine3"          "aquamarine4"         
##  [13] "azure"                "azure1"               "azure2"              
##  [16] "azure3"               "azure4"               "beige"               
##  [19] "bisque"               "bisque1"              "bisque2"             
##  [22] "bisque3"              "bisque4"              "black"               
##  [25] "blanchedalmond"       "blue"                 "blue1"               
##  [28] "blue2"                "blue3"                "blue4"               
##  [31] "blueviolet"           "brown"                "brown1"              
##  [34] "brown2"               "brown3"               "brown4"              
##  [37] "burlywood"            "burlywood1"           "burlywood2"          
##  [40] "burlywood3"           "burlywood4"           "cadetblue"           
##  [43] "cadetblue1"           "cadetblue2"           "cadetblue3"          
##  [46] "cadetblue4"           "chartreuse"           "chartreuse1"         
##  [49] "chartreuse2"          "chartreuse3"          "chartreuse4"         
##  [52] "chocolate"            "chocolate1"           "chocolate2"          
##  [55] "chocolate3"           "chocolate4"           "coral"               
##  [58] "coral1"               "coral2"               "coral3"              
##  [61] "coral4"               "cornflowerblue"       "cornsilk"            
##  [64] "cornsilk1"            "cornsilk2"            "cornsilk3"           
##  [67] "cornsilk4"            "cyan"                 "cyan1"               
##  [70] "cyan2"                "cyan3"                "cyan4"               
##  [73] "darkblue"             "darkcyan"             "darkgoldenrod"       
##  [76] "darkgoldenrod1"       "darkgoldenrod2"       "darkgoldenrod3"      
##  [79] "darkgoldenrod4"       "darkgray"             "darkgreen"           
##  [82] "darkgrey"             "darkkhaki"            "darkmagenta"         
##  [85] "darkolivegreen"       "darkolivegreen1"      "darkolivegreen2"     
##  [88] "darkolivegreen3"      "darkolivegreen4"      "darkorange"          
##  [91] "darkorange1"          "darkorange2"          "darkorange3"         
##  [94] "darkorange4"          "darkorchid"           "darkorchid1"         
##  [97] "darkorchid2"          "darkorchid3"          "darkorchid4"         
## [100] "darkred"              "darksalmon"           "darkseagreen"        
## [103] "darkseagreen1"        "darkseagreen2"        "darkseagreen3"       
## [106] "darkseagreen4"        "darkslateblue"        "darkslategray"       
## [109] "darkslategray1"       "darkslategray2"       "darkslategray3"      
## [112] "darkslategray4"       "darkslategrey"        "darkturquoise"       
## [115] "darkviolet"           "deeppink"             "deeppink1"           
## [118] "deeppink2"            "deeppink3"            "deeppink4"           
## [121] "deepskyblue"          "deepskyblue1"         "deepskyblue2"        
## [124] "deepskyblue3"         "deepskyblue4"         "dimgray"             
## [127] "dimgrey"              "dodgerblue"           "dodgerblue1"         
## [130] "dodgerblue2"          "dodgerblue3"          "dodgerblue4"         
## [133] "firebrick"            "firebrick1"           "firebrick2"          
## [136] "firebrick3"           "firebrick4"           "floralwhite"         
## [139] "forestgreen"          "gainsboro"            "ghostwhite"          
## [142] "gold"                 "gold1"                "gold2"               
## [145] "gold3"                "gold4"                "goldenrod"           
## [148] "goldenrod1"           "goldenrod2"           "goldenrod3"          
## [151] "goldenrod4"           "gray"                 "gray0"               
## [154] "gray1"                "gray2"                "gray3"               
## [157] "gray4"                "gray5"                "gray6"               
## [160] "gray7"                "gray8"                "gray9"               
## [163] "gray10"               "gray11"               "gray12"              
## [166] "gray13"               "gray14"               "gray15"              
## [169] "gray16"               "gray17"               "gray18"              
## [172] "gray19"               "gray20"               "gray21"              
## [175] "gray22"               "gray23"               "gray24"              
## [178] "gray25"               "gray26"               "gray27"              
## [181] "gray28"               "gray29"               "gray30"              
## [184] "gray31"               "gray32"               "gray33"              
## [187] "gray34"               "gray35"               "gray36"              
## [190] "gray37"               "gray38"               "gray39"              
## [193] "gray40"               "gray41"               "gray42"              
## [196] "gray43"               "gray44"               "gray45"              
## [199] "gray46"               "gray47"               "gray48"              
## [202] "gray49"               "gray50"               "gray51"              
## [205] "gray52"               "gray53"               "gray54"              
## [208] "gray55"               "gray56"               "gray57"              
## [211] "gray58"               "gray59"               "gray60"              
## [214] "gray61"               "gray62"               "gray63"              
## [217] "gray64"               "gray65"               "gray66"              
## [220] "gray67"               "gray68"               "gray69"              
## [223] "gray70"               "gray71"               "gray72"              
## [226] "gray73"               "gray74"               "gray75"              
## [229] "gray76"               "gray77"               "gray78"              
## [232] "gray79"               "gray80"               "gray81"              
## [235] "gray82"               "gray83"               "gray84"              
## [238] "gray85"               "gray86"               "gray87"              
## [241] "gray88"               "gray89"               "gray90"              
## [244] "gray91"               "gray92"               "gray93"              
## [247] "gray94"               "gray95"               "gray96"              
## [250] "gray97"               "gray98"               "gray99"              
## [253] "gray100"              "green"                "green1"              
## [256] "green2"               "green3"               "green4"              
## [259] "greenyellow"          "grey"                 "grey0"               
## [262] "grey1"                "grey2"                "grey3"               
## [265] "grey4"                "grey5"                "grey6"               
## [268] "grey7"                "grey8"                "grey9"               
## [271] "grey10"               "grey11"               "grey12"              
## [274] "grey13"               "grey14"               "grey15"              
## [277] "grey16"               "grey17"               "grey18"              
## [280] "grey19"               "grey20"               "grey21"              
## [283] "grey22"               "grey23"               "grey24"              
## [286] "grey25"               "grey26"               "grey27"              
## [289] "grey28"               "grey29"               "grey30"              
## [292] "grey31"               "grey32"               "grey33"              
## [295] "grey34"               "grey35"               "grey36"              
## [298] "grey37"               "grey38"               "grey39"              
## [301] "grey40"               "grey41"               "grey42"              
## [304] "grey43"               "grey44"               "grey45"              
## [307] "grey46"               "grey47"               "grey48"              
## [310] "grey49"               "grey50"               "grey51"              
## [313] "grey52"               "grey53"               "grey54"              
## [316] "grey55"               "grey56"               "grey57"              
## [319] "grey58"               "grey59"               "grey60"              
## [322] "grey61"               "grey62"               "grey63"              
## [325] "grey64"               "grey65"               "grey66"              
## [328] "grey67"               "grey68"               "grey69"              
## [331] "grey70"               "grey71"               "grey72"              
## [334] "grey73"               "grey74"               "grey75"              
## [337] "grey76"               "grey77"               "grey78"              
## [340] "grey79"               "grey80"               "grey81"              
## [343] "grey82"               "grey83"               "grey84"              
## [346] "grey85"               "grey86"               "grey87"              
## [349] "grey88"               "grey89"               "grey90"              
## [352] "grey91"               "grey92"               "grey93"              
## [355] "grey94"               "grey95"               "grey96"              
## [358] "grey97"               "grey98"               "grey99"              
## [361] "grey100"              "honeydew"             "honeydew1"           
## [364] "honeydew2"            "honeydew3"            "honeydew4"           
## [367] "hotpink"              "hotpink1"             "hotpink2"            
## [370] "hotpink3"             "hotpink4"             "indianred"           
## [373] "indianred1"           "indianred2"           "indianred3"          
## [376] "indianred4"           "ivory"                "ivory1"              
## [379] "ivory2"               "ivory3"               "ivory4"              
## [382] "khaki"                "khaki1"               "khaki2"              
## [385] "khaki3"               "khaki4"               "lavender"            
## [388] "lavenderblush"        "lavenderblush1"       "lavenderblush2"      
## [391] "lavenderblush3"       "lavenderblush4"       "lawngreen"           
## [394] "lemonchiffon"         "lemonchiffon1"        "lemonchiffon2"       
## [397] "lemonchiffon3"        "lemonchiffon4"        "lightblue"           
## [400] "lightblue1"           "lightblue2"           "lightblue3"          
## [403] "lightblue4"           "lightcoral"           "lightcyan"           
## [406] "lightcyan1"           "lightcyan2"           "lightcyan3"          
## [409] "lightcyan4"           "lightgoldenrod"       "lightgoldenrod1"     
## [412] "lightgoldenrod2"      "lightgoldenrod3"      "lightgoldenrod4"     
## [415] "lightgoldenrodyellow" "lightgray"            "lightgreen"          
## [418] "lightgrey"            "lightpink"            "lightpink1"          
## [421] "lightpink2"           "lightpink3"           "lightpink4"          
## [424] "lightsalmon"          "lightsalmon1"         "lightsalmon2"        
## [427] "lightsalmon3"         "lightsalmon4"         "lightseagreen"       
## [430] "lightskyblue"         "lightskyblue1"        "lightskyblue2"       
## [433] "lightskyblue3"        "lightskyblue4"        "lightslateblue"      
## [436] "lightslategray"       "lightslategrey"       "lightsteelblue"      
## [439] "lightsteelblue1"      "lightsteelblue2"      "lightsteelblue3"     
## [442] "lightsteelblue4"      "lightyellow"          "lightyellow1"        
## [445] "lightyellow2"         "lightyellow3"         "lightyellow4"        
## [448] "limegreen"            "linen"                "magenta"             
## [451] "magenta1"             "magenta2"             "magenta3"            
## [454] "magenta4"             "maroon"               "maroon1"             
## [457] "maroon2"              "maroon3"              "maroon4"             
## [460] "mediumaquamarine"     "mediumblue"           "mediumorchid"        
## [463] "mediumorchid1"        "mediumorchid2"        "mediumorchid3"       
## [466] "mediumorchid4"        "mediumpurple"         "mediumpurple1"       
## [469] "mediumpurple2"        "mediumpurple3"        "mediumpurple4"       
## [472] "mediumseagreen"       "mediumslateblue"      "mediumspringgreen"   
## [475] "mediumturquoise"      "mediumvioletred"      "midnightblue"        
## [478] "mintcream"            "mistyrose"            "mistyrose1"          
## [481] "mistyrose2"           "mistyrose3"           "mistyrose4"          
## [484] "moccasin"             "navajowhite"          "navajowhite1"        
## [487] "navajowhite2"         "navajowhite3"         "navajowhite4"        
## [490] "navy"                 "navyblue"             "oldlace"             
## [493] "olivedrab"            "olivedrab1"           "olivedrab2"          
## [496] "olivedrab3"           "olivedrab4"           "orange"              
## [499] "orange1"              "orange2"              "orange3"             
## [502] "orange4"              "orangered"            "orangered1"          
## [505] "orangered2"           "orangered3"           "orangered4"          
## [508] "orchid"               "orchid1"              "orchid2"             
## [511] "orchid3"              "orchid4"              "palegoldenrod"       
## [514] "palegreen"            "palegreen1"           "palegreen2"          
## [517] "palegreen3"           "palegreen4"           "paleturquoise"       
## [520] "paleturquoise1"       "paleturquoise2"       "paleturquoise3"      
## [523] "paleturquoise4"       "palevioletred"        "palevioletred1"      
## [526] "palevioletred2"       "palevioletred3"       "palevioletred4"      
## [529] "papayawhip"           "peachpuff"            "peachpuff1"          
## [532] "peachpuff2"           "peachpuff3"           "peachpuff4"          
## [535] "peru"                 "pink"                 "pink1"               
## [538] "pink2"                "pink3"                "pink4"               
## [541] "plum"                 "plum1"                "plum2"               
## [544] "plum3"                "plum4"                "powderblue"          
## [547] "purple"               "purple1"              "purple2"             
## [550] "purple3"              "purple4"              "red"                 
## [553] "red1"                 "red2"                 "red3"                
## [556] "red4"                 "rosybrown"            "rosybrown1"          
## [559] "rosybrown2"           "rosybrown3"           "rosybrown4"          
## [562] "royalblue"            "royalblue1"           "royalblue2"          
## [565] "royalblue3"           "royalblue4"           "saddlebrown"         
## [568] "salmon"               "salmon1"              "salmon2"             
## [571] "salmon3"              "salmon4"              "sandybrown"          
## [574] "seagreen"             "seagreen1"            "seagreen2"           
## [577] "seagreen3"            "seagreen4"            "seashell"            
## [580] "seashell1"            "seashell2"            "seashell3"           
## [583] "seashell4"            "sienna"               "sienna1"             
## [586] "sienna2"              "sienna3"              "sienna4"             
## [589] "skyblue"              "skyblue1"             "skyblue2"            
## [592] "skyblue3"             "skyblue4"             "slateblue"           
## [595] "slateblue1"           "slateblue2"           "slateblue3"          
## [598] "slateblue4"           "slategray"            "slategray1"          
## [601] "slategray2"           "slategray3"           "slategray4"          
## [604] "slategrey"            "snow"                 "snow1"               
## [607] "snow2"                "snow3"                "snow4"               
## [610] "springgreen"          "springgreen1"         "springgreen2"        
## [613] "springgreen3"         "springgreen4"         "steelblue"           
## [616] "steelblue1"           "steelblue2"           "steelblue3"          
## [619] "steelblue4"           "tan"                  "tan1"                
## [622] "tan2"                 "tan3"                 "tan4"                
## [625] "thistle"              "thistle1"             "thistle2"            
## [628] "thistle3"             "thistle4"             "tomato"              
## [631] "tomato1"              "tomato2"              "tomato3"             
## [634] "tomato4"              "turquoise"            "turquoise1"          
## [637] "turquoise2"           "turquoise3"           "turquoise4"          
## [640] "violet"               "violetred"            "violetred1"          
## [643] "violetred2"           "violetred3"           "violetred4"          
## [646] "wheat"                "wheat1"               "wheat2"              
## [649] "wheat3"               "wheat4"               "whitesmoke"          
## [652] "yellow"               "yellow1"              "yellow2"             
## [655] "yellow3"              "yellow4"              "yellowgreen"
crtaj <- function(v1, v2){
  plot(v1, v2, col = "turquoise")
  plot(v2, v1, col = "turquoise")
}

Да бисмо испобали рад ове функције, правимо два вектора од 100 елемената који представљају случајне бројеве из \(\{1,2,\dots 1000\}\).

x <- sample(1:1000, 100)
y <- sample(1:1000, 100)
crtaj(x, y)

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

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

IF наредба

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

a
## [1] 9
if(a > 3) a <- a-3 else a <- 0
a
## [1] 6
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

Пример: цртање графика помоћу for петље

# x je niz brojeva 0,0.05,0.1, ..., 1
x <- seq(0, 1, 0.05)
# Prvo crtamo grafik y=x
plot(x, x, type = "l")
# Sada hocemo da nacrtamo preko njega i x^2, x^3,.., x^8:
for(i in 2:8)
{
  lines(x, x^i)
}

Хоћемо да направимо матрицу \(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
  • ЗАДАТАК: Написати функцију која из базе sleep брише елементе код којих је параметар extra мањи од задатог броја.
data(sleep)
sleep
##    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
brisi <- function(x){
  return (sleep[sleep$extra  >= x,])
}

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

brisi1 <- function(x){
  return (list(sleep[sleep$extra >= x, ], nrow(sleep[sleep$extra < x, ])))
}

*apply функције

Фамилија функција *apply са функцијама apply, sapply и lapply чини основу функционалног програмирања у R-у. У пиитању су функције које служе за пресликавање елемената (вектора/матрица/листи) у нове елементе применом једне исте функције на сваки елемент.

Додатна литература:

Функција sapply

Позив функције: sapply(v, f), где је v вектор, матрица или листа, а f функција коју треба применити на сваки елемент од v.

Дакле, sapply примењује дату функцију на сваки елемент датог вектра/матрице/листе и враћа резултујући вектор. Напоменимо да увек покушава да врати вектор, а уколико то није могуће враћа листу.

  • Квадрирање сваког члана вектора
x <- 1:5
sapply(x, function(num) num^2)
## [1]  1  4  9 16 25

Овај код је еквивалентан са x^2.

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

  • За листу матрица желимо да одредимо суму свих вредности у матрици.
matrix_list <- list(diag(5), diag(7), matrix(1:10, nrow = 2))
# na svaku matricu iz matrix_list primenimo funkciju sum
matrix_sums <- sapply(matrix_list, sum)
matrix_sums
## [1]  5  7 55

Ово је исто што и

c(sum(diag(5)), sum(diag(7)), sum(matrix(1:10, nrow=2)))
## [1]  5  7 55

Уколико се примењује вишедимензиона функција, функција sapply може да врати и матрицу.

sapply(1:5, function(k) c(k, k^2))
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    1    2    3    4    5
## [2,]    1    4    9   16   25

Свака колона је један резултат примењене функције. Прва врста је \(k\), а друга је \(k^2\).

Функција lapply

Користи се на исти начин као и функција sapply, само што као резултат враћа листу, а не вектор. Дакле, када не очекујемо да резултат буде увек истог типа и димензије, већ желимо да излаз буде листа, користимо функцију lapply.

  • За неки вектор направимо листу дијагоналних матрица одговарајуће димензије.
dimensions <- c(1, 3, 5)
lapply(dimensions, function(d) diag(d))
## [[1]]
##      [,1]
## [1,]    1
## 
## [[2]]
##      [,1] [,2] [,3]
## [1,]    1    0    0
## [2,]    0    1    0
## [3,]    0    0    1
## 
## [[3]]
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    1    0    0    0    0
## [2,]    0    1    0    0    0
## [3,]    0    0    1    0    0
## [4,]    0    0    0    1    0
## [5,]    0    0    0    0    1

Исти резултат преко for петље:

result <- list()
i <- 1
for (d in dimensions) {
  result[[i]] <- diag(d)
  i <- i + 1
}
result
## [[1]]
##      [,1]
## [1,]    1
## 
## [[2]]
##      [,1] [,2] [,3]
## [1,]    1    0    0
## [2,]    0    1    0
## [3,]    0    0    1
## 
## [[3]]
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    1    0    0    0    0
## [2,]    0    1    0    0    0
## [3,]    0    0    1    0    0
## [4,]    0    0    0    1    0
## [5,]    0    0    0    0    1

Функција apply

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

Функција се позива са apply(mat, dim, f), где је mat матрица или база података, dim је димензија по којој примењујемо функцију (1 је за врста, а 2 за колоне), a f je функција коју примењујемо на сваку врсту или колону.

  • Збир елемената у свакој колони неке матрице.
mat <- matrix(1:12, ncol = 4)
mat
##      [,1] [,2] [,3] [,4]
## [1,]    1    4    7   10
## [2,]    2    5    8   11
## [3,]    3    6    9   12
apply(mat, 2, sum)
## [1]  6 15 24 33

Ово је еквивалентно са

colSums(mat)
## [1]  6 15 24 33
  • Ако желимо просек по колонама
apply(mat, 1, mean)
## [1] 5.5 6.5 7.5

Што је еквивалентно са

rowMeans(mat)
## [1] 5.5 6.5 7.5

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

head(cars) #ugradjen skup podataka u R
##   speed dist
## 1     4    2
## 2     4   10
## 3     7    4
## 4     7   22
## 5     8   16
## 6     9   10
apply(cars, 2, summary)
##         speed   dist
## Min.      4.0   2.00
## 1st Qu.  12.0  26.00
## Median   15.0  36.00
## Mean     15.4  42.98
## 3rd Qu.  19.0  56.00
## Max.     25.0 120.00
  • Стандардизација колона базе података

Извршимо стандардизацију колоне базе података применом функције apply. Применићемо следећу трансформацију \(\frac{X-m}{\sigma}\) да бисмо добили случајну величину са очекивањем 0 и дисперзијом 1.

scaled_cars <- apply(cars, 2, function(x){
  (x - mean(x)) / sd(x)
})
scaled_cars
##             speed        dist
##  [1,] -2.15596948 -1.59025960
##  [2,] -2.15596948 -1.27981361
##  [3,] -1.58860909 -1.51264810
##  [4,] -1.58860909 -0.81414462
##  [5,] -1.39948896 -1.04697911
##  [6,] -1.21036883 -1.27981361
##  [7,] -1.02124870 -0.96936762
##  [8,] -1.02124870 -0.65892162
##  [9,] -1.02124870 -0.34847563
## [10,] -0.83212857 -1.00817336
## [11,] -0.83212857 -0.58131012
## [12,] -0.64300844 -1.12459061
## [13,] -0.64300844 -0.89175612
## [14,] -0.64300844 -0.73653312
## [15,] -0.64300844 -0.58131012
## [16,] -0.45388831 -0.65892162
## [17,] -0.45388831 -0.34847563
## [18,] -0.45388831 -0.34847563
## [19,] -0.45388831  0.11719336
## [20,] -0.26476818 -0.65892162
## [21,] -0.26476818 -0.27086413
## [22,] -0.26476818  0.66047385
## [23,] -0.26476818  1.43658884
## [24,] -0.07564805 -0.89175612
## [25,] -0.07564805 -0.65892162
## [26,] -0.07564805  0.42763936
## [27,]  0.11347208 -0.42608713
## [28,]  0.11347208 -0.11564113
## [29,]  0.30259221 -0.42608713
## [30,]  0.30259221 -0.11564113
## [31,]  0.30259221  0.27241636
## [32,]  0.49171234 -0.03802963
## [33,]  0.49171234  0.50525085
## [34,]  0.49171234  1.28136584
## [35,]  0.49171234  1.59181183
## [36,]  0.68083247 -0.27086413
## [37,]  0.68083247  0.11719336
## [38,]  0.68083247  0.97091984
## [39,]  0.86995260 -0.42608713
## [40,]  0.86995260  0.19480486
## [41,]  0.86995260  0.35002786
## [42,]  0.86995260  0.50525085
## [43,]  0.86995260  0.81569685
## [44,]  1.24819285  0.89330835
## [45,]  1.43731298  0.42763936
## [46,]  1.62643311  1.04853134
## [47,]  1.62643311  1.90225783
## [48,]  1.62643311  1.94106357
## [49,]  1.62643311  2.98881880
## [50,]  1.81555324  1.63061758

Израчунајмо просек и дисперзију оригиналних и скалираних података.

round(apply(cars, 2, function(x) c(mean(x), var(x))), 2)
##      speed   dist
## [1,] 15.40  42.98
## [2,] 27.96 664.06
round(apply(scaled_cars, 2, function(x) c(mean(x), var(x))), 2)
##      speed dist
## [1,]     0    0
## [2,]     1    1

Дакле, очекивано, скалирани подаци су такви да су просек и дисперзија сваке колоне редом 0 и 1.