Итак, до настоящего времени я написал только несколько R-кодов (точнее, 2 проекта), что, вероятно, могло бы оправдать степень немощи в этом вопросе, которая показалась бы опытному программисту.Как получить доступ к счетчику во вложенном цикле foreach?
Я пытаюсь распараллелить свой код проверки перекрестного ключа K, который направлен на поиск наилучшего набора переменных для конечной модели.
код несколько, как этот
child <- foreach(i=icount(ncol(parentModel)-1),.combine = 'rbind') %:%{
childModel<-parentModel
childModel[,i]<-NULL
filteredTestMTM <-foreach(j = icount(nFolds),.combine = c, .export = c("DataSplit","getProbabilityThreshold","SharpeRatio")) %dopar% {
splitData <- DataSplit(childModel, nFolds = nFolds, testFold=j)
testData<-splitData$testData
trainingData<-splitData$trainingData
trainingMTM <- trainingData[,ncol(trainingData)]
testMTM <- testData[,ncol(testData)]
Trade <- (trainingMTM > 0.001)*1.0 #mtmThreshold to be used here instead of 0.001
trainingData <- trainingData[,1:(ncol(trainingData)-1),drop=FALSE]
trainingData <- cbind(trainingData, Trade)
logmodel <- glm(Trade ~ .,data=trainingData, family = "binomial"(link="logit"))
trainingData <- trainingData[,1:(ncol(trainingData)-1),drop=FALSE]
trainingResults <- predict(logmodel, newdata=trainingData, type="response")
probabilityThreshold <- getProbabilityThreshold(trainingResults, trainingMTM, 0.001) #new Probability function to be defined to use optimParam
tR <- predict(logmodel, newdata=testData, type="response")
tMTM <- testMTM * ((tR>probabilityThreshold)*1.0)
return(tMTM)
}
totalSharpe <- (mean(filteredTestMTM)/sd(filteredTestMTM))
if (is.nan(totalSharpe)) {
totalSharpe = 0.0
}
return(c(totalSharpe,i))
}
В заключение - я беру parentModel, один за другим удалить переменные, запустить K кратная кросс проверки и сбора результатов. Однако я продолжаю получать ошибку
Error in `[<-.data.frame`(`*tmp*`, , i, value = NULL) :
object 'i' not found
Может ли кто-нибудь помочь мне в этом?
Edit: Я на Windows 7.
Я пробовал распараллеливать только один цикл раньше, параллельный внешний контур дал лучшие результаты, чем при распараллеливании внутреннего цикла. Я просто хотел проверить, улучшит ли вложенное распараллеливание. – Smit