Имена переменных могут быть немного непедагогическими, особенно для новичка.Перепишем часть apply
, чтобы не вводить читателя в заблуждение.
paretoscale <- function(data) {
# Here we perform centering
x.centered <- apply(x, 2, function(col) col - mean(col))
# Then we perform scaling on the mean-centered matrix
x.sc <- apply(x.centered, 2, function(col) col/sqrt(sd(col)))
x.sc <- cbind(sample_classes, x.sc)
Что делает apply(x, 2, function(col) col - mean(col))
, так это то, что он работает на объекте x
(data.frame или матрица) по столбцам.Для каждого столбца он находит свое среднее значение и вычитает его для каждого элемента.
Вот как apply
работает по сравнению с циклом for
.
xy <- data.frame(matrix(1:9, ncol = 3))
apply(X = xy, MARGIN = 2, FUN = function(col) col - mean(col))
X1 X2 X3
[1,] -1 -1 -1
[2,] 0 0 0
[3,] 1 1 1
# Create an empty object
newxy <- xy
newxy[] <- NA
# Work column-wise
for (i in 1:ncol(xy)) {
col <- xy[, i]
# Calculate mean and substract it from all elements of the column
newxy[, i] <- col - mean(col)
}
newxy
X1 X2 X3
1 -1 -1 -1
2 0 0 0
3 1 1 1