2014-10-20 51 views
0

我似乎無法在互聯網上找到任何有關此問題的幫助。{:任務1524失敗 - 「無法打開連接」中的錯誤

我使用'foreach'和'doParallel'軟件包並行運行一個函數。該函數將訓練好的模型和兩個數據幀作爲輸入,進行預測,然後對其中一個變量的值進行混洗,並再次進行預測。它計算每個變量的RMSE,並返回在混洗後增加的RMSE。這需要相當長的時間,所以我必須並行運行它。即便如此,每個型號仍需要2小時左右。

它似乎沒有與函數的代碼本身,也許是輸入,因爲我以前運行它沒有問題,我檢查了我的日誌文件後的錯誤,它處理所有的變量。我有5個模型,我想運行此功能。我首先在一個模型上運行它,並保存結果。現在,它的工作,我想把它應用到其餘的模型。

foreach循環完成處理後,似乎出現錯誤,因爲日誌文件指示分析了所有變量。但我沒有得到的是回溯表明錯誤發生在循環內部。

在此先感謝您對此問題的任何幫助。如果我不清楚任何事情,請告訴我。我正在運行Windows7和R版本3.1。

以下是錯誤:

Error in { : task 1524 failed - "cannot open the connection" 
10 stop(simpleError(msg, call = expr)) 
9 e$fun(obj, substitute(ex), parent.frame(), e$data) 
8 foreach(variable = names(newdata), .export = c("calc.rmse", "catf", 
    "start.timer", "stop.timer"), .combine = "rbind") %dopar% 
    { 
     baseline = NULL ... at feature_selection.R#53 
7 FUN(c("pH", "Ca", "P", "Sand")[[1L]], ...) 
6 lapply(X = X, FUN = FUN, ...) 
5 sapply(names(amodels[2:length(amodels)]), analyze.features, newdata = test.data, 
    newoutcomes = test.outcomes) at script.R#59 
4 eval(expr, envir, enclos) 
3 eval(ei, envir) 
2 withVisible(eval(ei, envir)) 
1 source("~/%FILEPATH%") 

這裏是有問題的函數代碼:

analyze.features = function(newdata, newoutcomes, model.name) { 
    model = amodels[[model.name]] 
    file = "data/shuffled_data.csv" 

    if(!file.exists(file)) { 
     cat("Creating shuffled data frame...\r\n") 
     shuffled.data = as.data.frame(sapply(newdata, shuffle)) 

     cat("Writing shuffled data frame to disk...\r\n") 
     write.csv(shuffled.data, file) 
    } else { 
     cat("Reading shuffled data from file...\r\n") 
     shuffled.data = read.csv(file) 
    } 

    # Send output to a log file. 
    writeLines("", "log.txt") 

    start.timer("About to enter parallelization...") 
    cat("Time is: ", format(Sys.time(), "%a %b %d %X %Y"), "\r\n") 

    output = foreach(variable = names(newdata), .export=c("calc.rmse", "catf", "start.timer", "stop.timer"), .combine="rbind") %dopar% { 
     baseline = NULL 
     shuffle = NULL 

     sdata = newdata 

     # Write to log file. 
     catf("Analyzing ", variable) 

     sdata[[variable]] = shuffled.data[[variable]] 

     baseline[[variable]] = suppressWarnings(calc.rmse(predict(model, newdata=newdata), newoutcomes)) 
     shuffle[[variable]] = suppressWarnings(calc.rmse(predict(model, newdata=sdata), newoutcomes)) 

     cbind(baseline=baseline, shuffle=shuffle) 
    } 

    stop.timer("Total time to analyze features") 

    save.df(output, paste("RMSE_", model.name, sep="")) 

    # Reduce list of kept features. 
    keep = row.names(output)[which(output[,2] - output[,1] > 0)] 

    rm(output, shuffled.data) 
    beep(1) 
    return(keep) 
} 

回答

0

我設法得到它的工作。我不得不重新寫我如何調用這個函數。最初,我通過sapply函數調用它。

sapply(names(amodels), analyze.features, newdata=test.data, newoutcomes=test.outcomes) 

由於只有5個模型,我將它們從sapply中取出並稱爲analyze.features,每個模型連續調用一次。工作完成沒有錯誤。我不知道爲什麼;我猜測它與sapply函數中的並行化有關。

相關問題