2015-01-12 2 views
0

Я пытаюсь преобразовать этот код на тот, который может быть выполнен на Windows:распараллеливания: пакет «параллельно» вместо «mclapply»

numCores <- detectCores() 
results <- mclapply(seq(1, 500), function(file, fID){ 
    myData <- fread(file.path(dirPath, fID, paste0(file, ".csv"))) 
    return(cbind(myData, rep(file, nrow(myData)))) 
}, mc.cores = numCores, fID = 1) 

на основе использования this tutorial, я написал следующий код .. .

UPDATE: правильный код приведен ниже:

getAllMyData <- function(numCores,folderID) 
{ 
    dirPath = paste0("D:/home/", folderID, '/') 
    cl <- makeCluster(4) 
    allTrips = parLapply(cl, 1:200, function(z){ 
    myData <- read.csv(paste0(dirPath, z, ".csv")) 
    return(cbind(myData , rep(z, nrow(myData)))) 
    }) 
    stopCluster(cl) 
    return(allTrips) 
} 

numCores <- detectCores() 
allMyData <- getAllMyData(numCores,1) 

ответ

1

Ваш первый код вызывает функцию

function(file, fID) 

Ваш второй код, напротив, использует

function(dirPath,fID) 

Это ошибка.

+0

спасибо. Я обновил свой пост, где я разместил правильный код. Тем не менее, странно, что среда выполнения почти такая же, как сериализованный код. –

+0

@ KlausosKlausos Это не так удивительно: чтение данных с диска (это большая часть того, что делает ваш код) не может быть эффективно распараллеливано, потому что это привязка к IO, а не операция с привязкой к процессору. –

 Смежные вопросы

  • Нет связанных вопросов^_^