让我们说这个例子,我想以很多不同的方式划分很多文件。
DIVIDERS = c(2,3,5,10)
我有一个文件列表,我打算使用每个分隔符对每个文件进行操作。我想同时这样做。
我有:
foreach(x = DIVIDERS) %dopar% {
for( y in listOfFiles ) {
print( paste( x, y, sep = "" ) )
这只是初步确保我确实在每个“Y”文件中获得每个“X”分隔符。但是,它们都打印出null。我想这是一个并行嵌套循环的问题。
有办法做到这一点吗?
答案 0 :(得分:0)
您需要将MyBase
导出到每个子线程:
listOfFiles
答案 1 :(得分:0)
这种筑巢很好;你只是没有正确地返回结果。 foreach循环返回NULL,因为内部for
循环返回一个不可见的NULL。
请改为尝试:
library(doParallel)
cl <- makePSOCKcluster(2)
registerDoParallel(cl)
DIVIDERS <- c(2,3,5,10)
listOfFiles <- c('file1', 'file2', 'file3')
newlist <-
foreach(x=DIVIDERS, .combine='c') %dopar% {
sublist <- vector('list', length(listOfFiles))
for(i in seq_along(listOfFiles)) {
y <- listOfFiles[[i]]
sublist[[i]] <- paste(x, y, sep = "")
}
sublist
}
请注意,这使用.combine='c'
,以便我们获取字符串列表,而不是字符串列表列表。
虽然在for
循环中嵌套foreach
循环没有问题,但在这种情况下我会使用lapply
:
newlist <-
foreach(x=DIVIDERS, .combine='c') %dopar% {
lapply(listOfFiles, function(y) paste(x, y, sep=""))
}