это первый, который я использовал mclapply для запуска параллельного скрипта на нескольких процессах, но проблема, которую я пробовал сценарий на моем ноутбуке, и он работал очень хорошо и правильно набрал dataframe
, но теперь, когда я запустить скрипт на моем office pc
, когда печать заканчивается, и пришло время, чтобы собрать данные, скрипт останавливается с этой ошибкой:Ошибка выделения памяти при использовании mclapply
Error: cannot allocate vector of size 80 Kb
fun <- function(testdf) {
l=12000
errordf=data.frame()
errordf <- mclapply(1:nrow(15000), function(i)
{
for (ind in 1:nrow(testdf))
{
if(i >= l/2){
testdf[ind,]$X = testdf[ind,]$pos * 2
} else
{
testdf[ind,]$X = testdf[ind,]$pos/l
}
}
permdf <- testdf
lapply(1:100, function(j)
{ permdf$X<- sample(permdf$X,nrow(permdf), replace=FALSE)
fit=lm(X ~ gx, permdf) #linear regression calculation
regerror=sum(residuals(fit)^2)
data.frame(pc=i,error=regerror)
})
}, mc.cores=3)
res<-NULL
tmp <- lapply(errordf, function(ii){
tmp <- lapply(ii, function(ij){ #rbind the data and return the dataframe
res<<- rbind(res, ij)
})
})
return (res)
}
testdf Например:
structure(list(ax = c(-0.0242214, 0.19770304, 0.01587302, -0.0374415,
0.05079826, 0.12209738), gx = c(-0.3913043, -0.0242214, -0.4259067,
-0.725, -0.0374415, 0.01587302), pos = c(11222, 13564, 16532,
12543, 12534, 14354)), .Names = c("ax", "gx", "pos"), row.names = c(NA,
-6L), class = "data.frame")
я уверен, что код работает (вот почему я не включил полный код), потому что я пробовал несколько раз на моем ноутбуке, но когда я попытался его на моем офисе ПК он обед этого ошибка.
любая помощь будет appreciatd
Имеются ли версии пакетов на обоих ПК? Какие операционные системы вы используете? –
В настоящее время у меня нет моего ноутбука, но это «macbook pro», и я думаю, что у меня есть все новые пакеты. и мой офисный компьютер - «fedora 16», а на офисном ПК у меня есть «R версия 2.15.2». – ifreak
@ RomanLuštrik есть ли способ структурировать функции lapply лучше, чтобы избежать проблемы с памятью? возможно, замените 1 lapply на цикл или так? – ifreak