Компьютер, который я использовал в офисе, был недавно обновлен до четырехъядерного, что является для меня благословением, поскольку иногда мне нужно сделать несколько явных циклов, используя R, результаты которых основаны на некоторых логических правилах, которые Я не могу понять, как это сделать, кроме явного цикла.
Для некоторой справочной информации иногда у меня есть около 10000-20000 строк, которые мне нужно посмотреть на 2 столбца, и основывать их значения и некоторые логические правила, чтобы сгенерировать значение для нового столбца.
Я пытаюсь использовать пакет doSNOW
для более эффективного использования неиспользуемой мощности процессора. Я написал демонстрационный скрипт, как показано ниже, на примере из здесь :
library(doSNOW)
# rm(list=ls())
cl<-makeCluster(2) # I have two cores
registerDoSNOW(cl)
table <- data.frame(a=rnorm(1000),b=rnorm(1000))
process <- function(table)
{for (loop in (1:nrow(table)))
{table[loop,"c"] <- with(table[loop,], a*b)
assign("table",table,envir=.GlobalEnv)
}
}
system.time(process(table))
system.time(foreach(j=1:2 ) %dopar% process(table))
stopCluster(cl)
Я использую нетбук с процессором ATOM внутри, чтобы попробовать это, но результат странный:
system.time(process(table))
user system elapsed
2.336 0.028 2.308
system.time(foreach(j=1:2 ) %dopar% process(table))
user system elapsed
0.160 0.032 3.646
После использования doSNOW время, необходимое для получения результата, даже больше, чем без использования doSNOW, мне интересно, не в этом ли проблема моего нетбука ATOM или я что-то не так сделал в коде?
Спасибо!