我正在尝试编写一个R包,该包包含几个嵌套函数,它们位于foreach语句和doMPI后端中。它抛出了一个“无法找到”XXX对象错误。奇怪的是,如果我使用doParallel作为后端,这个错误不会发生。这是问题的一个例子,但我可以使用一个工作解决方案,用doMPI解决更大的问题。
这是使用RStudio、roxygen、devtools等编译到R包中的代码。
#' Test function level 1
#' @param var11 first variable for function 1
#' @param var12 second variable for f
在我面临的平行化问题上寻求你的帮助或专家意见。
我经常在一个相当大的数据集上运行一个Xgboost分类器模型(dim(train_data) = 357,401 x 281,dims后配方prep()是147,304 x 1159 )用于多类预测。在基本R中,使用registerDoParallel(使用我的服务器的所有24个核心),该模型运行时间略高于4小时。我现在正试图在Tidymodels环境中运行它,但是,我还没有找到一个健壮的并行化选项来调整网格。
我在tidymodel中尝试了以下并行化选项。它们似乎都适用于较小的子样本(例如20%的数据),但是当我运行整个数据集时,选项1-4失败
我正在尝试并行化一个外循环,同时按顺序运行内循环。当使用doSMP包时,下面的代码可以在旋转中工作,但是当使用foreach和doParallel包(在Windows机上都是R版本)时,它不能在base R中工作。错误消息是:could not find function "%do%"。有什么办法解决这个问题吗?
foreach(j = X, .combine = c) %dopar% {
Z=1
foreach(i = Y, .combine = c) %do% {
paste(j, i, Z, sep = "")
最近,我开始使用foreach和doParallel包将代码切换到并行执行。由于不同的线程相互干扰,使用futile.logger日志记录的工作效率很低。因此,我开始使用ParallelLogger,即使在并行设置中,它也应该处理日志记录。不幸的是,我对这个记录器有两个问题,我自己解决不了,也许我做错了什么,或者系统中有一个错误。
第一个问题是,尽管我创建了一个控制台附录(请参阅下面的MWE ),但没有线程登录到控制台上。
我的记录器生成的日志文件损坏的方式是launchLogViewer抛出一个line 40 did not have 6 elements错误。
这是MWE:
在R中,我使用foreach + doParallel对矩阵的每一行多重地应用一个函数,当矩阵有许多行时,foreach在重复迭代之前和之后花费很长的时间。
例如,如果我运行:
library(foreach)
library(doParallel)
doWork <- function(data) {
# setup parallel backend to use many processors
cores=detectCores()
number_of_cores_to_use = cores[1]-1 # not to overload the computer
我正在使用一个名为MFE的库来生成元特性。但是,我现在正在处理几个文件,我注意到我只使用了我的机器的一个核心,花费了太多的时间。
我一直在尝试实现一些库,正如我在另一个问题中所看到的:library(iterators) library(foreach) library(doParallel)
这一个,但我笨到不能实现它=‘。
我只想把这个片段放到我所有的内核中,这样我就可以让它更快了:
## Extract general, statistical and model based measures
metafeatures(Species ~ ., iris, groups=c("g
我正在通过使用%dopar%来生成虚拟数据集来运行一个嵌套循环,以满足体验的需要。参考链接:
样本数据集
set.seed(123)
n = 10000 #number of unique IDs (10k as trial) , real data consits of 50k unique IDs
ID <- paste(LETTERS[1:8],sample(n),sep = "")
year <- c('2015','2016','2017','2018')
month <- c('