用map()函数代替for循环以加快速度

时间:2018-08-27 00:55:00

标签: r

我创建一个名为list_ok的列表:

 list_ok <- list()
 a=c(1,2,3,4,5)
 b=c(6,7,8,9,10)
 c=c(11,12,13,14,15)
 d=c(16, 17, 18, 19, 20)
 e=c(21,22,23,24,25)

 list_ok[[1]]=a
 list_ok[[2]]=b
 list_ok[[3]]=c
 list_ok[[4]]=d
 list_ok[[5]]=e

下面的代码使用for loop创建相同的list_ok:

new_list <- vector(mode = "list", length=5)

for (i in 1:5) {
  for(k in 1:5) {     
    new_list[[i]][k] <- list_ok[[i]][k]
  }
}

> new_list

如何使用地图功能进行相同的练习?我的问题是知道如何处理map函数中的两个不同索引(ik)。

我将在另一个更复杂的练习中使用相同的想法。

有帮助吗?

2 个答案:

答案 0 :(得分:2)

您会发现此问答非常有用:purrr map equivalent of nested for loop

对于循环中的循环,最简单的方法是创建一个匿名函数作为map的第二个参数,并在该匿名函数中再次使用map(在这种情况下,我使用的是{{1 }})的另一个匿名函数,您可以在其中将一个循环(x)与另一个循环(y)组合在一起。

map_dbl

答案 1 :(得分:1)

使用lapply软件包的sapplyparallel怎么样?

library(parallel)

numCores <- detectCores()
cl = makeCluster(numCores)

parLapply(list_ok, function(x)
  sapply(x, function(y) y), cl = cl)