Я запускаю функцию apply-family поверх большого набора данных, и поэтому я задаюсь вопросом, есть ли способ узнать, как идет работа до сих пор, сколько элементов просмотрено до сих пор или что-то в этом роде?Есть ли способ распечатать число итераций при запуске функции приложения в R
ответ
Вы можете рассмотреть вопрос о создании глобального счетчика, а также указать, когда вы хотите распечатать прогресс, например, вы можете печатать уведомление, когда 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"
Почему бы не просто «распечатать» (я) '? –
Данные, переданные функции, могут быть более конкретными, чем он хочет видеть. Он просто хочет знать прогресс, поэтому лучше иметь отдельный «счетчик». Я просто приводил пример здесь, в действительности его данные должны быть более сложными, чем «1: 5», и могут не обязательно отражать прогресс. – Psidom
Вы можете добавить оператор печати функции вы используете как этот
apply(mtcars,2, function(i) {print(i[1])
mean(i)})
Не очень, но делает то, что вы хотите
Отъезд пакет [pbapply] (https://cran.r-project.org/web/packages/pbapply/pbapply.pdf) (прогресс-бар применить) – lukeA
'применяются (... , function (x) {print (whatever); do_whatever()}) ' – eddi
@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