這將使用相同的方法
normalize <- function(x) {
x <- sweep(x, 2, apply(x, 2, mean)) # retrive the mean from each column
2* sweep(x, 2, apply(x, 2, function(y) max(y)-min(y)), "/")
}
}
編輯
使用colMeans
重新縮放矩陣作爲意見提出當然更快
normalize <- function(x) {
aa <- colMeans(x)
x <- sweep(x, 2, aa) # retrive the mean from each column
2* sweep(x, 2, apply(x, 2, function(y) max(y)-min(y)), "/")
}
A <- matrix(1:24, ncol=3)
> normalize(A)
[,1] [,2] [,3]
[1,] -1.0000000 -1.0000000 -1.0000000
[2,] -0.7142857 -0.7142857 -0.7142857
[3,] -0.4285714 -0.4285714 -0.4285714
[4,] -0.1428571 -0.1428571 -0.1428571
[5,] 0.1428571 0.1428571 0.1428571
[6,] 0.4285714 0.4285714 0.4285714
[7,] 0.7142857 0.7142857 0.7142857
[8,] 1.0000000 1.0000000 1.0000000
EDIT與基座包
scale(A,center=TRUE,scale=apply(A,2,function(x) 0.5*(max(x)-min(x))))
[,1] [,2] [,3]
[1,] -1.0000000 -1.0000000 -1.0000000
[2,] -0.7142857 -0.7142857 -0.7142857
[3,] -0.4285714 -0.4285714 -0.4285714
[4,] -0.1428571 -0.1428571 -0.1428571
[5,] 0.1428571 0.1428571 0.1428571
[6,] 0.4285714 0.4285714 0.4285714
[7,] 0.7142857 0.7142857 0.7142857
[8,] 1.0000000 1.0000000 1.0000000
首先編寫一些測試,以確保您的慢代碼能夠提供正確的答案。然後,你可以檢查所有「解決方案」即將被濺到所以做你想做的。寫作測試很有趣! – Spacedman