параллельное выполнение задачи R в R - PullRequest
9 голосов
/ 01 апреля 2011

Я использую doSMP в качестве параллельного бэкенда в Windows 7 с R 2.12.2 Я нахожусь в ошибке, и хотел бы понять вероятную причину. Вот пример кода для воспроизведения ошибки.

require(foreach)
require(doSMP)
require(data.table)
wrk <- startWorkers(workerCount = 2)
registerDoSMP(wrk)
DF = data.table(x=c("b","b","b","a","a"),v=rnorm(5))
setkey(DF,x)
foreach( i=1:2)  %dopar% {
    DF[J("a"),]
}

Сообщение об ошибке

Error in { : task 1 failed - "could not find function "J""

Ответы [ 2 ]

8 голосов
/ 01 апреля 2011

Я не использовал doSMP, но я немного покопался, и похоже, этот пост сталкивается с аналогичной проблемой.

, похоже, вы должны это сделать:

foreach( i=1:2, .packages="data.table")  %dopar% {
    DF[J("a"),]
}

Я не могу проверить, так как у меня нет под рукой машины с Windows.

7 голосов
/ 01 апреля 2011

ОК, я спросил Revolution Computing, и Стив Веллер (из RC) ответил:

Проблема связана с R-областью. От по умолчанию, foreach () будет искать переменные, определенные в его собственном 'среда'. Любые объекты определены за ее пределами должны быть явно переданы ему через Аргумент ".export".

В вашем случае вам нужно будет изменить ваш вызов foreach () для передачи в объекты 'DF' и 'J':

...

foreach(i=1:2, .export=c("DF","J")) %dopar% {
...

Я еще не пробовал ни одного решения, но доверяю и JD, и RC ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...