当我使用%dopar%调用自定义函数的foreach循环(使用)时,我遇到了问题.使用Linux时没有真正的问题,但是当我使用Windows时,无法找到自定义的功能.很难用文字解释这个问题,所以我写了一个小例子来展示它.假设我有三个简单函数的集合,其中FUN2(using %do%)和FUN3(using %dopar%)调用第一个函数(FUN):
FUN <- function(x,y,z) { x + y + z }
FUN2 <- function(a, b) {
foreach(i=1:3) %do% FUN(i, a, b)
}
FUN3 <- function(a, b) {
foreach(i=1:3) %dopar% FUN(i, a, b)
}
Run Code Online (Sandbox Code Playgroud)
这些函数存储在一个名为的脚本中foreach_testfunctions.R.在另一个脚本(foreach.test)中我发布了这些函数,使用library(doParallel)并尝试使用这些函数.首先我用Linux做,一切正常:
source("foreach_testfunctions.R")
a <- 2
b <- 3
library(doParallel)
registerDoParallel()
foreach(i=1:3) %do% FUN(i, a, b) ## works fine
FUN2(a, b) ## works fine
foreach(i=1:3) %dopar% FUN(i, a, b) ## …Run Code Online (Sandbox Code Playgroud) 我一直在尝试并行化我的代码,因为目前我正在使用双循环来记录结果.我一直试图看看如何在R中使用SNOW和doParallel包来做到这一点.
如果您想要一个可复制的示例,请使用
residual_anomalies <- matrix(sample(c('ANOMALY','NO SIGNAL'),300,replace=T),nrow=100)
Run Code Online (Sandbox Code Playgroud)
而不是使用这三行
inputfile <- paste0("simulation_",i,"_",metrics[k],"_US.csv")
data <- residuals(inputfile)
residual_anomalies <- conceptdrift(data,length=10,threshold=.05)
Run Code Online (Sandbox Code Playgroud)
在嵌套的for循环中.整个代码如下.
source("GetMetrics.R")
source("slowdrift_resampling_vectorized.R")
metrics <- unique(metrics)
num_metrics <- length(metrics)
f1_scores_table_raw = data.frame(matrix(ncol=10,nrow=46))
f1_scores_table_pred = data.frame(matrix(ncol=10,nrow=46))
rownames(f1_scores_table_raw) <- metrics
colnames(f1_scores_table_raw) <- paste0("Sim",1:10)
rownames(f1_scores_table_pred) <- metrics
colnames(f1_scores_table_pred) <- paste0("Sim",1:10)
for(k in 1:num_metrics){
for(i in 1:10){
#inputfile <- paste0("simulation_",i,"_",metrics[k],"_US.csv")
#data <- residuals(inputfile)
#residual_anomalies <- conceptdrift(data,length=10,threshold=.05)
#the above is how I get the data frame but I'll create another one for reproducibility.
residual_anomalies <- as.data.frame(matrix(sample(c('ANOMALY','NO SIGNAL'),300,replace=T),nrow=100))
names(residual_anomalies) <- …Run Code Online (Sandbox Code Playgroud)