相关疑难解决方法(0)

"*apply"系列真的没有矢量化吗?

因此,我们习惯于对每个R新用户说" apply没有矢量化,请查看Patrick Burns R Inferno Circle 4 ",其中说(我引用):

常见的反射是使用apply系列中的函数.这不是 矢量化,而是循环隐藏.apply函数在其定义中有一个for循环.lapply函数掩盖了循环,但执行时间往往大致等于显式for循环.

实际上,快速查看apply源代码会显示循环:

grep("for", capture.output(getAnywhere("apply")), value = TRUE)
## [1] "        for (i in 1L:d2) {"  "    else for (i in 1L:d2) {"
Run Code Online (Sandbox Code Playgroud)

好到目前为止,但看看lapplyvapply实际上揭示了一个完全不同的图片:

lapply
## function (X, FUN, ...) 
## {
##     FUN <- match.fun(FUN)
##     if (!is.vector(X) || is.object(X)) 
##        X <- as.list(X)
##     .Internal(lapply(X, FUN))
## }
## <bytecode: 0x000000000284b618>
## <environment: namespace:base>
Run Code Online (Sandbox Code Playgroud)

所以显然没有R for环隐藏在那里,而是他们调用内部C编写的函数.

兔子 洞的快速浏览显示了几乎相同的图片

此外,让我们以 …

performance loops r vectorization apply

132
推荐指数
4
解决办法
7851
查看次数

标签 统计

apply ×1

loops ×1

performance ×1

r ×1

vectorization ×1