2014-11-10 3 views
1

Я хочу иметь возможность обобщать поведение clusterApply(), чтобы я мог выполнять параллелизацию функций с различным количеством аргументов.using clusterApply с неизвестным числом аргументов

Обычно я использую clusterApply() так:

clusterApply(cl=cl,seq_len(nsim),FUN=runsim,arg1,arg2,arg3) 

Но что, если я не знаю, сколько аргументов функции runsim имеет? Я думал об использовании do.call("runsim",listofArguments), но я не знаю, могу ли я использовать его внутри clusterApply.

Любые предложения?

+2

Вы можете использовать 'do.call (clusterApply, listofArguments)'. – Roland

+0

Спасибо, это работает! – beginneR

+0

Извините, я ошибся. Это не работает для меня. do.call ("clusterApply", list (cl = cl, seq_len (nsim), runSim, listofArguments)) – beginneR

ответ

1

Основная проблема, как представляется, тот факт, что do.call хочет функцию (или имя его) в качестве первого аргумента, в то время как clusterApply, как и все функции из apply семьи, проходит итерация над объектом в качестве первого аргумента функции, которую он называет , Следовательно, одно решение может быть:

clusterApply(cl=cl,seq_len(nsim),FUN=function(x) do.call(rumsim, args = list(...))) 

... теперь могут быть заполнены с тем, что разные аргументы существуют в том числе возможность сдать x (т.е. срез итерированное над объектом, в данном случае число моделирования).

Я не вижу необходимости также обертывать clusterApply в do.call, как вы знаете, какую функцию вызывать (clusterApply).

Смежные вопросы