R 使用并行应用后如何保存数据帧表单列表
我有以下函数R 使用并行应用后如何保存数据帧表单列表,r,parallel-processing,tidyverse,R,Parallel Processing,Tidyverse,我有以下函数my_func,它接受存储在数据帧params中的参数,并将一个额外的参数作为另一个独立的dfindf 库(tidyverse) 我的职能1500 50 5 #> 2 5000 1500 15 #> 3 100 50 25 #> #> [[2]] #>A、B、C #> 1 15000 1500 150 #> 2 150000 45000 450 #> 3 3000 1500 750 #> #> [[3]] #>A、B、C #> 1 -15000 -1500
my_func
,它接受存储在数据帧params
中的参数,并将一个额外的参数作为另一个独立的dfindf
库(tidyverse)
我的职能1500 50 5
#> 2 5000 1500 15
#> 3 100 50 25
#>
#> [[2]]
#>A、B、C
#> 1 15000 1500 150
#> 2 150000 45000 450
#> 3 3000 1500 750
#>
#> [[3]]
#>A、B、C
#> 1 -15000 -1500 -150
#> 2 -150000 -45000 -450
#> 3 -3000 -1500 -750
然后我要做的是用包运行上面的函数。我是这样做的:
库(并行)
参数%>%
lift(mcmapply,mc.cores=detectCores()-1)(FUN=my_func,indf=indf)
但它会生成以下矩阵
[,1][,2][,3]
[1,] 500 1500 -150
[2,] 5000 45000 -450
[3,] 100 1500 -750
如何使用parallel,使其生成数据帧列表(如初始输出)
library(parallel)
nc <- max(detectCores() - 1, 1L)
params %>%
lift(mcmapply, SIMPLIFY = FALSE, mc.cores = nc)(FUN = my_func, MoreArgs = list(indf = indf))
# [[1]]
# A B C
# 1 500 50 5
# 2 5000 1500 15
# 3 100 50 25
#
# [[2]]
# A B C
# 1 15000 1500 150
# 2 150000 45000 450
# 3 3000 1500 750
#
# [[3]]
# A B C
# 1 -15000 -1500 -150
# 2 -150000 -45000 -450
# 3 -3000 -1500 -750
nc <- max(parallel::detectCores() - 1, 1L)
par_pmap <- function(.l, .f, ..., mc.cores = getOption("mc.cores", 2L)) {
do.call(
parallel::mcmapply,
c(.l, list(FUN = .f, MoreArgs = list(...), SIMPLIFY = FALSE, mc.cores = mc.cores))
)
}
library(magrittr)
params %>%
par_pmap(my_func, indf = indf, mc.cores = nc)
# [[1]]
# A B C
# 1 500 50 5
# 2 5000 1500 15
# 3 100 50 25
#
# [[2]]
# A B C
# 1 15000 1500 150
# 2 150000 45000 450
# 3 3000 1500 750
#
# [[3]]
# A B C
# 1 -15000 -1500 -150
# 2 -150000 -45000 -450
# 3 -3000 -1500 -750