Я работаю с пользовательской случайной функцией леса, которая требует как начальной, так и конечной точки в наборе геномных данных (около 56 тыс. Столбцов).Параллельная обработка в R
Я хотел бы разбить номера столбцов на подгруппы и позволить каждой подгруппе обрабатываться индивидуально, чтобы ускорить процесс. Я попробовал это (безуспешно) с помощью следующего кода:
library(foreach)
library(doMC)
foreach(startMrk=(markers$start), endMrk=(markers$end)) %dopar%
rfFunction(genoA,genoB,0.8,ntree=100,startMrk=startMrk,endMrk=endMrk)
Где STARTMRK массив числовых переменных: 1 4 8 12 16
и endMrk еще один массив: 3 7 11 15 19
Для этого примера я хочу одно ядро для запустить образцы 1: 3, другой запустить 4: 7 и т. д. Я новичок в идее параллельной обработки в R, поэтому я более чем готов изучить любую имеющуюся документацию. Кто-нибудь имеет советы по вещам, которые мне не хватает для параллельной обработки или для вышеуказанного кода?
Это не сработало точно правильно, но когда я что-то вроде: 'г <- Еогеасп (я = 1: 5, .combine = "cbind")% dopar% {RandomForest (Дженоа, genoB, 0.8, ntree = 100, startMrk = маркеры $ start [i], endMrk = маркеры $ end [i])} ' Я получил то, что хотел. Один последний вопрос: пользовательская функция, которую я использую, возвращает список. Есть ли способ выборочно объединить элементы из списка? Спасибо за помощь! – trvrr
Немного поздно, но чтобы ответить на ваш «последний вопрос»: вместо того, чтобы «выборочно комбинировать элементы из списка», почему бы не просто извлечь элемент списка, который вам интересен? Вместо: 'foreach (...)% dopar% {return (list (A = ..., B = ...))}'; try: 'foreach (...)% dopar% {res <- list (A = ..., B = ...); возврата (рес $ A)} '. Кроме того, определите свою собственную функцию '.combine', которая делает то же самое. (Первый вариант приведет к меньшему перемещению данных, важно, если 'res $ B' велико!) – dynamo