2017-08-28 12 views
0

Rでプログラミングするのは初めてですが、並列計算とforeachの使用方法を学びたいと考えています。Foreachループ - {:タスク1のエラー - "オブジェクトが見つかりません"

私の場合、最高のMAPEとそれに関連する最良の変数を見つけるために可能性の組み合わせをループする必要があります。

私はループ用のネストを始めましたが、180k行で3つの変数の最適な組み合わせを見つけようとしましたが、2日間連続して実行され、停止しませんでした。

これは2つの変数のコードですが、ロジックを理解できると思います。

for (i in names(df3)) { 
    for (j in names(df3)) { 
    name4 = names(df3["DiasAusencia"]) 

    if (i != name4 && j != name4 && i != j) { 
    df4 = df3[, c(i, j, "DiasAusencia")] 
    H = holdout(df4$DiasAusencia, ratio = 2/3) 
    Fi = fit(DiasAusencia ~ ., df4[H$tr,], model = "svm") 
    testDf = df4[H$ts,] 
    P = predict(Fi, testDf) 
    MAE = mmetric(testDf$DiasAusencia, P, metric = "MAE") 
    MAPE = mmetric(testDf$DiasAusencia, P, metric = "MAPE") 
    res = cbind(testDf, predicted = P, MAE, MAPE) 

    if (MAPE < BESTMAPE) { 
     BESTMAPE = MAPE 
     bestres = res 
    } 
    } 
    } 
} 

だから私は、これまでのところありません成功し、foreachの文書に見て、この問題に適用しようとしたので、私は可能なすべての組み合わせを実行することができました。これは私のforeachのコードです:

svm3 = function(var1, var2){ 
    if (var1 != name4 && var2 != name4 && var1 != var2) { 
    df4 = df3[, c(var1, var2, "DiasAusencia")] 
    H = holdout(df4$DiasAusencia, ratio = 2/3) 
    Fi = fit(DiasAusencia ~ ., df4[H$tr,], model = "svm") 
    testDf = df4[H$ts,] 
    P = predict(Fi, testDf) 
    MAE = mmetric(testDf$DiasAusencia, P, metric = "MAE") 
    MAPE = mmetric(testDf$DiasAusencia, P, metric = "MAPE") 
    res = cbind(testDf, predicted = P, MAE, MAPE) 

    return(MAPE) 
    } 
} 

sol = foreach(i=1:ncols, j=1:ncols, .combine = rbind, .packages="rminer")%dopar%{ 
    var1 = names(df3[i]) 
    var2 = names(df3[j]) 
    name4 = names(df3["DiasAusencia"]) 

    svm3(var1, var2) 

    tmp = matrix(MAPE, ncol = ncols) 

    return(tmp) 
} 

これは私が{で

エラーを取得エラーです:タスク1が失敗しました -

はあなたたちを願っています "オブジェクトのMAPE 'が見つかりません"この問題で私を助けることができます!

ありがとうございます。

答えて

0

あなたは何にsvm3からの復帰を代入していない:

svm3(var1, var2) 

    tmp = matrix(MAPE, ncol = ncols) 

ので、上記の2行目のMAPEと呼ばれるものは何もありません。

MAPE = svm3(var1, var2) 

を修正する必要があります。

+0

今、私はこのエラーが発生しています。「データ」はベクタータイプでなければならず、「NULL」でした。私は自分のMAPEが、ループが反復して "tmp"マトリックスに追加されるたびに生成されるべき数字であることを知っています。どのようにベクトルにするのですか? –

+0

あなたは最初のエラーを見つけたのは幸運でした。おそらく再現可能な例を今作成し、この新しいエラーを生成する新しい質問をする方法を学ぶべきでしょう。 – Spacedman

関連する問題