让我们创建一个向量(长度为
50000
):
vec <- rep(x = "a", times = 50000)
现在我们要将索引 41000 到 48000 之间的所有元素分配给一个新值 (
"b"
)
第一种方法,
vec[41000:48000] <- "b"
在我的机器上,大约需要
0.106
秒
第二种方法,(for循环)
for (i in 41000:48000){ vec[i] <- "b" }
在我的机器上,大约需要
0.125
秒。
什么可以解释这种差异?
谢谢!
不,矢量化更快
vec <- rep(x = "a", times = 50000)
f1 <- function() {
vec[41000:48000] <- "b"
vec
}
f2 <- function() {
for (i in 41000:48000) {
vec[i] <- "b"
}
vec
}
microbenchmark(
f1(),
f2(),
check = "equal",
unit = "relative"
)
显示
Unit: relative
expr min lq mean median uq max neval
f1() 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 100
f2() 9.458217 5.225293 6.660215 6.661513 5.950026 4.613076 100