2014-02-17 6 views
0

Я использую mapply (function, args) для большого набора данных. После 100 итераций мне нужно установить задержку на 1 сек. Поэтому вопрос заключается в том, можно ли показывать количество итераций или индикатор выполнения в mapply (function, args) Спасибоотображение количества итераций в mapply

ответ

1

Нет, но если вы переключитесь на использование соответствующих функций от plyr, вы можете добавить индикатор выполнения к вызову функции ,

Без вас дает нам минимальную воспроизводимый пример, я не собираюсь усилий найти точный эквивалент plyr, но это будет один из m*ply функций:

> ls(pos=2,pattern="m.*ply") 
[1] "maply" "mdply" "mlply" "m_ply" 
0

Если вы знаете, общее количество итераций заранее, вы можете просто добавить еще один аргумент в mapply как счетчик итераций. В этом примере я добавил z. Этот пример делает сон командной строки в течение 1 секунды каждые 3 итераций ....

mapply(function(x,y,z) { if(z%%3==0){Sys.sleep(1); 
    cat(paste0("Interation " , z , " ...sleeping\n")) } 
    x*y } ,x=1:10,y=1:10,z=1:10) 
#Interation 3 ...sleeping 
#Interation 6 ...sleeping 
#Interation 9 ...sleeping 
# [1] 1 4 9 16 25 36 49 64 81 100 

Если вам нужно более убедительно Оберните заявление в system.time(). Я получаю время выполнения 3,002 секунды.