为什么在 for 循环内的向量中赋值比在向量内的范围内赋值要慢?

问题描述 投票:0回答:1

让我们创建一个向量(长度为

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
秒。

什么可以解释这种差异?

谢谢!

r time-complexity
1个回答
1
投票

不,矢量化更快

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
© www.soinside.com 2019 - 2024. All rights reserved.