gpt4 book ai didi

r - sapply 的并行版本

转载 作者:行者123 更新时间:2023-12-05 01:10:06 32 4
gpt4 key购买 nike

我们是否有 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>

创建于 2019-11-22 由 reprex package (v0.3.0)

由于 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 ...

创建于 2019-11-22 由 reprex package (v0.3.0)

最后,您始终可以创建一个 Fork 集群并使用 parSapply反而。

关于r - sapply 的并行版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31050556/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com