2015-01-12 6 views
1

Как назвать глобальную функцию speedDistribution от функции parLapply?Как вызвать глобальную функцию из функции `parLapply`?

speedDistribution <- function(speed) 
{ 
    return(quantile(speed, seq(0.2, 1, by = 0.20))) 
} 

estimateFeatures <- function(trips,target) 
{ 
    cl <- makeCluster(4) 
    features = NULL 
    features = parLapply(cl, 1:length(trips), function(z){  
    z <- as.data.frame(z) 
    speed <- 3.6 * sqrt(diff(z$x)^2 + diff(z$y)^2) 
    s <- speed[!speed > mean(speed) + sd(speed) * 5]  
    features = c(speedDistribution(s),target) 
    return(cbind(features, rep(z, nrow(features)))) 
    }) 
    stopCluster(cl) 
    return(features) 
} 

Error in checkForRemoteErrors(val) : 4 nodes produced errors; first error: could not find function "speedDistribution"

+0

Простое угадывание здесь: 'parApply()' создает/взламывает локальную среду, где глобальная область видимости недопустима (по умолчанию R ищет вверх по средам). Попробуйте поместить функцию 'speedDistribution()' внутри вашей лямбда-функции для 'parLapply()'. – Vlo

ответ

1

Вы должны экспортировать функцию, чтобы быть доступными для всех работников с помощью функции clusterExport. Add:

clusterExport(cl, "speedDistribution") 

Прежде чем вы выполните свои расчеты.

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