外形尺寸還有其他的選擇也是如此。
我使用x
和y
這樣創建:
x <- matrix(1:4000, ncol = 4)
y <- 1:4
第一種是使用sweep()
,其中2
是MARGIN
:
sweep(x, 2, y)
另一種方式是通過使用apply()
循環排x
apply(x, 2, function(xi, y) {
xi - y
}, y = y)
如果你看看時間來評估你的選擇加上面兩個,你可以看到你的速度是最快的。
microbenchmark::microbenchmark(
t(t(x)-y),
apply(x, 2, function(xi, y) {
xi - y
}, y = y),
sweep(x, 2, y),
times = 1000
)
輸出:
Unit: microseconds
expr min lq mean median uq max neval
t(t(x) - y) 23.062 24.3390 32.30354 25.6270 27.2205 1044.485 1000
apply(x, 2, function(xi, y) { xi - y }, y = y) 67.541 70.6580 96.80288 75.1020 79.7865 1245.883 1000
sweep(x, 2, y) 46.673 50.1955 108.42835 53.0515 57.0315 44158.248 1000
從此你很可能推導出sweep()
是性能和可讀性之間的良好折衷,但t(t(x) - y)
是最快的。
看看'sweep()' – jogo