将lapply转换为foreach?

时间:2015-09-15 20:47:18

标签: r foreach apply lapply

我希望使用lapply包将第二个# Make the new list函数(foreach)转换为foreach循环。

## Example data
lst <- lapply(1:30, function(x) lapply(1:5, function(y) rnorm(10)))

## Make the new list
res <- lapply(1:5, function(x) lapply(1:10, function(y) sapply(lst, function(z) z[[x]][[y]])))

我不确定这是否可行。我并不担心lapply表现优于foreach循环。对于上下文,我正在以这种方式重新组织向量列表:

new_thing[[5]][[10]][30] <- daily_by_security[[30]][[5]][10]

谢谢!

1 个答案:

答案 0 :(得分:4)

为了找到解决问题的方法,我查看了foreach示例,第二个示例正是您正在寻找的内容:

library("foreach")
example(foreach)

# equivalent to lapply(1:3, sqrt)
foreach(i=1:3) %do%  sqrt(i)

然后我根据你的问题调整了这个:

lst <- lapply(1:30, function(x) lapply(1:5, function(y) rnorm(10)))
resFE <- foreach(i = 1:5) %do% 
                 lapply(1:10, function(y) sapply(lst, function(z) z[[i]][[y]]))

编辑: OP能够根据我的工作找出解决方案。这是解决方案:

resFE <- foreach(i = 1:5, .packages = "foreach") %dopar% 
                 { foreach(m = 1:10) %dopar% 
                    { foreach(t = lst, .combine = c) %do% 
                     { t[[i]][[m]] } } }