, .
- , :
tranZ <- vector('numeric', length = nrow(Z))
for (i in 1:nrow(Z)) {
tranZ[i] <- (Z[i,1] - mean(Z[i,-1])) / sd(Z[i,-1])
}
, - :
(Z[,1] - rowMeans(Z[,-1])) / apply(Z[, -1], 1, sd)
vapply:
tranZ_v <- vapply(1:nrow(Z), function(X) (Z[X, 1] - mean(Z[X, -1])) / sd(Z[X, -1]),
FUN.VALUE = numeric(1))
*apply - 1:nrow(Z), : .
require(rbenchmark)
process <- function(x) {
(x[["value"]] - mean(c(x[["A"]], x[["B"]], x[["C"]]))) / sd(c(x[["A"]], x[["B"]], x[["C"]]))
}
p2 <- function(x) {
(x[1] - mean(x[-1])) / sd(x[-1])
}
apply_fun <- function() apply(Z, 1, process)
apply_fun2 <- function() apply(Z, 1, p2)
apply_sd <- function() (Z[,1] - rowMeans(Z[,-1])) / apply(Z[, -1], 1, sd)
vapply_anon <- function() vapply(1:nrow(Z), FUN = function(X) (Z[X, 1] - mean(Z[X, -1])) / sd(Z[X, -1]),
FUN.VALUE = numeric(1))
bb <- benchmark(apply_fun(), apply_fun2(), apply_sd(), vapply_anon(),
columns = c('test', 'elapsed', 'relative'),
replications = 100,
order = 'elapsed')
, sd, :
> bb
test elapsed relative
3 apply_sd() 0.021 1.000
4 vapply_anon() 0.030 1.429
1 apply_fun() 0.033 1.571
2 apply_fun2() 0.034 1.619