Normalization
1.R中减去均值的方法
# 设置一个矩阵
> x <- matrix(c(1,2,3,8,7,6,5,4,3),ncol = 3,byrow = T)
> x
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 8 7 6
[3,] 5 4 3
# apply函数
> center_apply <- function(x) {
+ apply(x, 2, function(y) y - mean(y))
+ }
> center_apply(x) ## apply it
[,1] [,2] [,3]
[1,] -3.6666667 -2.3333333 -1
[2,] 3.3333333 2.6666667 2
[3,] 0.3333333 -0.3333333 -1
# rep函数
> x - rep(colMeans(x), rep.int(nrow(x), ncol(x)))
[,1] [,2] [,3]
[1,] -3.6666667 -2.3333333 -1
[2,] 3.3333333 2.6666667 2
[3,] 0.3333333 -0.3333333 -1
scale函数
将每列除以标准差(center=T);
每列除以sqrt(sum(x^2)/(n-1))(center=F);
如果用标准差scale而不center:scale(x, center = FALSE, scale = apply(x, 2, sd, na.rm = TRUE))
# scale函数,center默认T,意为减去mean
> scale(x,center = TRUE,scale = F)
[,1] [,2] [,3]
[1,] -3.6666667 -2.3333333 -1
[2,] 3.3333333 2.6666667 2
[3,] 0.3333333 -0.3333333 -1
attr(,"scaled:center")
[1] 4.666667 4.333333 4.000000
> scale(x,center = TRUE,scale = T)
[,1] [,2] [,3]
[1,] -1.0440738 -0.9271726 -0.5773503
[2,] 0.9491580 1.0596259 1.1547005
[3,] 0.0949158 -0.1324532 -0.5773503
attr(,"scaled:center")
[1] 4.666667 4.333333 4.000000
attr(,"scaled:scale")
[1] 3.511885 2.516611 1.732051