1

したがって、今日まで私はほんの一握りの R コード (正確には 2 つのプロジェクト) しか書いていません。

最終モデルに使用する変数の最適なセットを見つけることを目的とした 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 を使用して、変数を 1 つずつ削除し、K 分割交差検証を実行して、結果を収集します。ただし、エラーが発生し続けます

Error in `[<-.data.frame`(`*tmp*`, , i, value = NULL) : 
object 'i' not found

誰でもこれで私を助けてもらえますか?

編集:私はWindows 7を使用しています。

4

2 に答える 2

0

並列化を扱うときは、必要な変数がコア (「環境」) で利用できるようにする必要があります。次のようなコマンドを使用してこれを実現できますforce(i)-詳細については、たとえばこれを見てください http://www.win-vector.com/blog/2016/01/parallel-computing-in-r/

于 2016-01-20T13:24:31.260 に答える