我使用foreach
来并行化我的代码.然而,我发现无论我是否在循环末尾添加print
语句,结果都是不同的.
下面是print
语句的结尾(我得到了我想要的结果):
library(foreach)
grid <- expand.grid(
lambda=c(1,2),
mtry=c(1),
nodsize=c(1)
)
n.cores <- parallel::detectCores() - 1
#https://stackoverflow.com/a/16718078/1979665
my.cluster <- parallel::makeCluster(n.cores, outfile = "")
doParallel::registerDoParallel(cl = my.cluster)
params.all <- foreach (i = 1:nrow(grid), .combine = "rbind") %dopar% {
params <- grid[i,]
params$rmse <- "foo"
print(params)
}
parallel::stopCluster(cl = my.cluster)
params.all
结果是:
lambda mtry nodsize rmse
1 1 1 1 foo
2 2 1 1 foo
以下是结尾处的print
句话:
library(foreach)
grid <- expand.grid(
lambda=c(1,2),
mtry=c(1),
nodsize=c(1)
)
n.cores <- parallel::detectCores() - 1
#https://stackoverflow.com/a/16718078/1979665
my.cluster <- parallel::makeCluster(n.cores, outfile = "")
doParallel::registerDoParallel(cl = my.cluster)
params.all <- foreach (i = 1:nrow(grid), .combine = "rbind") %dopar% {
params <- grid[i,]
params$rmse <- "foo"
# print(params) LINE COMMENTED
}
parallel::stopCluster(cl = my.cluster)
params.all
现在的结果是:
[,1]
result.1 "foo"
result.2 "foo"
这是不是很奇怪,还是很正常?