У меня есть вложенный цикл 'for' в R, который работает в большом фрейме данных (более 80 000 объектов из более чем 6000 переменных) и присваивает значение новому столбцу на основе значений в других переменных.
Из-за размера фрейма данных и того факта, что я тестирую несколько изменений в циклах, я хотел бы вставить индикатор выполнения, чтобы у меня было больше представление о том, сколько могут длиться циклы.
ИтакДо сих пор я пробовал это:
# create an example dataset
id <- c(1,2,3,4,5,6,7,8,9,10)
capital1 <- replicate(1,sample(0:100,10,rep=TRUE))
capital2 <- replicate(1,sample(0:100,10,rep=TRUE))
capital3 <- replicate(1,sample(0:100,10,rep=TRUE))
capital4 <- replicate(1,sample(0:100,10,rep=TRUE))
capital5 <- replicate(1,sample(0:100,10,rep=TRUE))
capital6 <- replicate(1,sample(0:100,10,rep=TRUE))
capital7 <- replicate(1,sample(0:100,10,rep=TRUE))
capital8 <- replicate(1,sample(0:100,10,rep=TRUE))
capital9 <- replicate(1,sample(0:100,10,rep=TRUE))
capital10 <- replicate(1,sample(0:100,10,rep=TRUE))
data <- data.frame(id, capital1, capital2, capital3, capital4,
capital5, capital6, capital7, capital8, capital9, capital10)
# create new column to populate with results of loop
nrows<-length(data[,1])
AFT<-rep("N_A",nrows)
# set up progress bar for loop
total <- nrows
pb <- txtProgressBar(min = 0, max = length(total), style = 3)
# for loop
for (i in c(1:nrows)) {
Sys.sleep(.1)
# Mask out waterbodies and dense artifical (urban) areas
if (data$capital1[i]>70) {
AFT[i]<-'water.urban'}
if (data$capital2[i]>70) {
AFT[i]<-'water.urban'}
if (data$capital3[i]+data$capital4[i]>=60){
AFT[i]<-'multi.mixed'}
if (data$capital4[i]>70) {
AFT[i]<-'multi.nb'}
# etc. (10+ more loops assigning different AFTs)
# print progress as loop runs
cat("\r", i, "of", 10, "\r")
flush.console()
}
В данный момент код выполняется, но индикатор выполнения, кажется, сразу завершается, в то время как фактический процесс продолжается.Я полагаю, я не помещаю индикатор выполнения в нужное место в цикле?