2017-08-28 3 views
0

Je suis nouveau à la programmation en R, mais j'essaie d'apprendre l'informatique parallèle et l'utilisation de foreach. Cependant, dans mon cas, j'ai besoin de boucler des combinaisons de possibilités pour trouver le meilleur MAPE et les meilleures variables qui s'y rapportent.Foreach Loop - Erreur dans {: tâche 1 a échoué - "objet non trouvé"

J'ai commencé à faire des boucles imbriquées, mais avec 180k lignes et en essayant de trouver la meilleure combinaison de 3 variables, il a fonctionné pendant 2 jours d'affilée et il ne s'est pas arrêté.

Ceci le code juste pour 2 variables mais je pense que vous pouvez comprendre la logique.

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 
    } 
    } 
    } 
} 

J'ai regardé dans la documentation foreach et a essayé de l'appliquer à ce problème, donc je pouvais exécuter toutes les combinaisons possibles, mais sans succès jusqu'à présent. Ceci est mon code 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) 
} 

Ceci est l'erreur que je reçois

Erreur dans {: tâche 1 a échoué - "objet 'MAPE' not found"

vous espérez les gars peut m'aider avec ce problème!

Merci d'avance.

Répondre

0

Vous n'êtes pas attribuer le retour de svm3 à quoi que ce soit:

svm3(var1, var2) 

    tmp = matrix(MAPE, ncol = ncols) 

donc il n'y a rien appelé MAPE dans la deuxième ligne ci-dessus.

MAPE = svm3(var1, var2) 

devrait le réparer.

+0

Maintenant, j'ai cette erreur "'data' doit être de type vectoriel, était 'NULL'". Je sais que mon MAPE est un nombre qui devrait être généré chaque fois que la boucle itère et ajouté à la matrice "tmp". Comment puis-je en faire un vecteur? –

+0

Vous avez eu de la chance d'avoir repéré la première erreur - vous devriez probablement apprendre à reproduire un exemple reproductible maintenant, puis poser une nouvelle question qui produit cette nouvelle erreur! – Spacedman