Anu*_*nuj 7 parallel-processing r
我们是否有并行版本的 sapply,因为我们在并行包中有 mclapply,它是 lapply 的一个版本。
正如@RHertel 指出的那样,该snow软件包具有应用系列选项,但它不计入mcsapply要求的功能。如果您看一下 的实现sapply,它只是一个调用,lapply并进行了更多的后期处理:
sapply
#> function (X, FUN, ..., simplify = TRUE, USE.NAMES = TRUE)
#> {
#> FUN <- match.fun(FUN)
#> answer <- lapply(X = X, FUN = FUN, ...)
#> if (USE.NAMES && is.character(X) && is.null(names(answer)))
#> names(answer) <- X
#> if (!isFALSE(simplify) && length(answer))
#> simplify2array(answer, higher = (simplify == "array"))
#> else answer
#> }
#> <bytecode: 0x559a53feef18>
#> <environment: namespace:base>
Run Code Online (Sandbox Code Playgroud)
由reprex 包(v0.3.0)于 2019 年 11 月 22 日创建
由于该mclapply函数等效于lapply,您实际上可以编写自己的替换 的某些部分sapply,这是一个示例:
# An mc-version of the sapply function.
mcsapply <- function (X, FUN, ..., simplify = TRUE, USE.NAMES = TRUE) {
FUN <- match.fun(FUN)
answer <- parallel::mclapply(X = X, FUN = FUN, ...)
if (USE.NAMES && is.character(X) && is.null(names(answer)))
names(answer) <- X
if (!isFALSE(simplify) && length(answer))
simplify2array(answer, higher = (simplify == "array"))
else answer
}
# Testing it out
library(parallel)
ans0 <- mcsapply(1:20, function(i) rnorm(1e4), mc.cores = 4)
ans1 <- sapply(1:20, function(i) rnorm(1e4))
# Same structure
str(ans0)
#> num [1:10000, 1:20] 0.1792 0.1581 -0.1293 -0.0324 0.1836 ...
str(ans1)
#> num [1:10000, 1:20] 1.304 1.355 -1.387 1.07 0.582 ...
Run Code Online (Sandbox Code Playgroud)
由reprex 包(v0.3.0)于 2019 年 11 月 22 日创建
最后,您始终可以创建一个 Fork 集群并使用parSapply。
| 归档时间: |
|
| 查看次数: |
3288 次 |
| 最近记录: |