将 lapply 转换为 foreach?
Converting lapply to foreach?
我希望使用 foreach
包将第二个 lapply
函数 (# Make the new list
) 转换为 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]
谢谢!
为了弄清楚如何解决您的问题,我查看了 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]] } } }
我希望使用 foreach
包将第二个 lapply
函数 (# Make the new list
) 转换为 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]
谢谢!
为了弄清楚如何解决您的问题,我查看了 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]] } } }