У меня есть большая таблица данных. Каждый параллельный процесс читает из него, обрабатывает данные и возвращает гораздо меньшую таблицу данных. Я не хочу, чтобы большое DT копировалось во все процессы, но, похоже, функция %dopar%
в пакете foreach
должна копировать.
Есть ли способ сделать объект общим для всех процессов (в окнах)? То есть, используя пакет, отличный от foreach
.
Пример кода
library(doParallel)
cluster = makeCluster(4)
registerDoParallel(cluster)
M = 1e4 # make this larger
dt = data.table(x = rep(LETTERS, M), y = rnorm(26*M))
res = foreach(trim = seq(0.6, 0.95, 0.05), .combine = rbind) %dopar% {
dt[, .(trimmean = mean(y, trim = trim)), by = x][, trim := trim]
}
(Меня не интересует лучший способ сделать это в data.table без использования parallel. Это просто для того, чтобы показать случай, когда подпроцессы должны читать все данные для обработки, но никогда не изменять их)
foreach
должен скопировать. ищу другие возможности - person jf328   schedule 04.03.2016