cat() не выводит каждый раз в цикле for

У меня есть цикл, который получает некоторую информацию из каждого поля из каждой таблицы, из каждой базы данных в списке (так что 3 вложенных цикла for). потому что трудно понять, где я нахожусь в цикле, и мой интернет часто глючит, я решил выдать быструю строку для каждого цикла цикла... вот как выглядит код:

for (i in 1:nrow(conns)){
  ## Connect to each db in the dataframe conns and get a list of the Tables

  ## FOR EACH TABLE
  for (j in 1:length(Tables)){

        ## FOR EACH COLUMN (or field)
        for (k in 1:length(Columns)){
          ## do stuff, and then:

          cat(paste(i," of ",nrow(conns),"; ",round(j/length(Tables)*100,2),"%; ",k,
                      " of ",length(Columns),"; \n",sep=""))

        }


  }
  close(channel)
}

И вот как выглядит вывод этого кота:

14 of 14; 43.77%; 1 of 5; 
14 of 14; 43.77%; 2 of 5; 
14 of 14; 43.77%; 3 of 5; 
14 of 14; 43.77%; 4 of 5; 
14 of 14; 43.77%; 5 of 5; 
14 of 14; 44.15%; 1 of 4; 
14 of 14; 44.15%; 2 of 4; 
14 of 14; 44.15%; 3 of 4; 
14 of 14; 44.15%; 4 of 4; 
14 of 14; 44.53%; 1 of 4; 
14 of 14; 44.53%; 2 of 4; 
14 of 14; 44.53%; 3 of 4; 
14 of 14; 44.53%; 4 of 4; 
>

и тогда цикл завершается без ошибки. Но почему же тогда он остановился на 44,5%? Поэтому я решил проверить, изменился ли цикл вручную, и получил следующий вывод:

> length(Tables)
[1] 265
> j
[1] 265
> cat(paste(i," of ",nrow(conns),"; ",round(j/length(Tables)*100,2),"%; ",k,
+ " of ",length(Columns),"; \n",sep=""))
14 of 14; 100%; 4 of 0; 

Так почему же j процента перестали выводиться на уровне 44,53%, тогда как на самом деле он был равен 100%?

EDIT: полный код структуры цикла for ниже:

## FOR EACH PROJECT
for (i in 13:nrow(conns)){
  d <- conns[i,1] %>% as.character
  p <- conns[i,3] %>% as.character
  u <- conns[i,2] %>% as.character

  channel <- odbcConnect(d,u,p)

  ## Find out what tables are available
  sqlTables(channel) %>% select(TABLE_NAME) -> Tables 
  Tables <- as.vector(Tables[,1])

  ## Throw out long uuid ones
  Tables <- Tables[!(substr(Tables,9,9) == "-" & nchar(Tables) == 36)]

  ## FOR EACH TABLE
  for (j in 1:length(Tables)){
    ## Check that Table name doesn't have questionmarks or starts with sys
    if (!grepl("\\?|^sys",Tables[j])){
      ##GET COLUMNS
      Columns <- as.data.frame(colnames(
        sqlFetch(channel, Tables[j], rows_at_time = 5,max=1)))
      ## Check that there's at least 1 column
      if (ncol(Columns)!=0){
        Columns <- as.vector(Columns[,1])

        ## FOR EACH COLUMN
        for (k in 1:length(Columns)){
          if(grepl("\\?\\?\\?\\?|DoB",Columns[k])!=T){
            db1[l,1] <- d
            db1[l,2] <- Tables[j]
            db1[l,3] <-  Columns[k]

            AC <- paste('"',as.character(Columns[k]),'"',sep="")
            Q <- paste('SELECT COUNT(',AC,') AS Count1, 
                       COUNT(DISTINCT (',AC,')) AS Count2 FROM "',Tables[j],'"',sep="")
            Result <- sqlQuery(channel, Q, rows_at_time = 5)
            db1[l,4] <- Result[1,1]
            db1[l,5] <- Result[1,2]
            cat(paste(i," of ",nrow(conns),"; ",round(j/length(Tables)*100,2),"%; ",k,
                      " of ",length(Columns),"; \n",sep=""))
            l <- l + 1
          }
        }
      }
    }
  }
  close(channel)
}

person Amit Kohli    schedule 12.11.2015    source источник
comment
недостаточно информации, чтобы рассказать, нам нужен воспроизводимый пример ... Может быть, вы случайно создали избыточную переменную j в теле цикла j?   -  person Ben Bolker    schedule 12.11.2015
comment
Добавление дополнительной информации.   -  person Amit Kohli    schedule 12.11.2015
comment
@AmitKohli Это одно из трех утверждений if, которое его останавливает. Для случаев после 44,53% !grepl("\\?|^sys",Tables[j]), ncol(Columns)!=0 или grepl("\\?\\?\\?\\?|DoB",Columns[k])!=T неверно.   -  person David Robinson    schedule 12.11.2015
comment
@DavidRobinson, вот и все... ncol(Columns)!=0 срабатывал из-за всех дополнительных случайных таблиц, которые создает SQL Azure. Хороший звонок вам обоим. Официальный ответ представителю?   -  person Amit Kohli    schedule 12.11.2015
comment
@AmitKohli, конечно, добавил.   -  person David Robinson    schedule 12.11.2015


Ответы (1)


Это один из трех операторов if, которые мешают ему достичь оператора печати в последующих циклах.

Для случаев после 44,53% !grepl("\\?|^sys",Tables[j]), ncol(Columns)!=0 или grepl("\\?\\?\\?\\?|DoB",Columns[k])!=T неверно.

person David Robinson    schedule 12.11.2015