2016-06-03 1 views
3

Я запускаю функцию apply-family поверх большого набора данных, и поэтому я задаюсь вопросом, есть ли способ узнать, как идет работа до сих пор, сколько элементов просмотрено до сих пор или что-то в этом роде?Есть ли способ распечатать число итераций при запуске функции приложения в R

+3

Отъезд пакет [pbapply] (https://cran.r-project.org/web/packages/pbapply/pbapply.pdf) (прогресс-бар применить) – lukeA

+3

'применяются (... , function (x) {print (whatever); do_whatever()}) ' – eddi

+0

@lukeA eh, а не супер впечатлен pbapply, он добавляет много накладных расходов, сравните следующее:' tbp <- txtProgressBar (12000000) ' , 'x <- lapply (1: 2000000, function (y) {setTextProgressBar (tpb, getTxtProgressBar (tpb) + 1); y + 1})' vs 'x <- pblapply (1: 2000000, function (y) y + 1) 'последний занимает минуты, первый занимает, возможно, 10 секунд – Shape

ответ

2

Вы можете рассмотреть вопрос о создании глобального счетчика, а также указать, когда вы хотите распечатать прогресс, например, вы можете печатать уведомление, когда 10% ваших данных были обработаны;

counter <- 0 
data <- rnorm(100) 
results <- sapply(data, function(x) { 
        counter <<- counter + 1; 
        if(counter %in% seq(0, length(y), 10)) 
         print(paste(counter, "% has been processed"))}) 

[1] "10 % has been processed" 
[1] "20 % has been processed" 
[1] "30 % has been processed" 
[1] "40 % has been processed" 
[1] "50 % has been processed" 
[1] "60 % has been processed" 
[1] "70 % has been processed" 
[1] "80 % has been processed" 
[1] "90 % has been processed" 
[1] "100 % has been processed" 
+3

Почему бы не просто «распечатать» (я) '? –

+0

Данные, переданные функции, могут быть более конкретными, чем он хочет видеть. Он просто хочет знать прогресс, поэтому лучше иметь отдельный «счетчик». Я просто приводил пример здесь, в действительности его данные должны быть более сложными, чем «1: 5», и могут не обязательно отражать прогресс. – Psidom

1

Вы можете добавить оператор печати функции вы используете как этот

apply(mtcars,2, function(i) {print(i[1]) 
mean(i)}) 

Не очень, но делает то, что вы хотите