2017-08-28 28 views
0

我是R編程新手,但我試圖學習並行計算和foreach的使用。Foreach循環 - {:任務1失敗 - 「找不到對象」中的錯誤

在我的情況下,我需要循環組合的可能性來找到最好的MAPE和與之相關的最佳變量。

我開始做嵌套for循環,但與180K行,並試圖找到它連續運行2天3個變量的最佳組合,它並沒有停止。

這個代碼只是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) 

所以沒有什麼在上面的第二條線叫MAPE

MAPE = svm3(var1, var2) 

應該修復它。

+0

Altough現在我有這個錯誤「'數據'必須是矢量類型,是'NULL'」。我知道我的MAPE是每次循環迭代並添加到「tmp」矩陣時應該生成的數字。我如何使它成爲矢量? –

+0

你很幸運我發現了第一個錯誤 - 你現在應該學會如何製作一個可重複的例子,然後問一個能產生這個新錯誤的新問題! – Spacedman