. txtProgressBar(), @JavK ! - .
- , . terminfo . , , , tput:
tc_left <- system2('tput','cub1',stdout=T);
reset . , Unix, terminfo; , RStudio Windows.
, txtProgressBar() ( @JavK), , reset : ! , cat('\r');, .
. , progInit(), , ( , , ), , prog(), . , prog.
progInit <- function(N,dec=3L) {
progStart <<- Sys.time();
progI <<- 1L;
progN <<- N;
progDec <<- dec;
};
prog <- function() {
rem <- unclass(difftime(Sys.time(),progStart,units='secs'))*(progN/progI-1);
days <- as.integer(rem/86400); rem <- rem-days*86400;
hours <- as.integer(rem/3600); rem <- rem-hours*3600;
minutes <- as.integer(rem/60); rem <- rem-minutes*60;
seconds <- as.integer(rem); rem <- rem-seconds;
millis <- as.integer(rem*1000);
over <- paste(collapse='',rep(' ',20L));
pct <- progI/progN*100;
if (days!=0L) {
msg <- sprintf(' %.*f%% %dd/%02d:%02d:%02d.%03d%s',
progDec,pct,days,hours,minutes,seconds,millis,over);
} else {
msg <- sprintf(' %.*f%% %02d:%02d:%02d.%03d%s',
progDec,pct,hours,minutes,seconds,millis,over);
};
cat('\r');
cat(msg);
cat('\r');
progI <<- progI+1L;
};
library(data.table);
SOURCE <- data.table(NAME=rep(paste0("NAME", as.character(1:2889)), each=600), VALUE=sample(c(TRUE,FALSE), 600, TRUE) );
setkey(SOURCE,NAME);
a <- SOURCE[,unique(NAME)];
COMB <- data.table(expand.grid(a,a, stringsAsFactors=FALSE));
append <- function(X) {
prog();
data.table(NAME1=X[1],VALUE1=SOURCE[X[1],VALUE],NAME2=X[2],VALUE2=SOURCE[X[2],VALUE]);
};
x <- COMB[1:1e4,]; progInit(nrow(x)); rbindlist(apply(x,1,append));
: , ( /), .
, COMB , ; , . , -, , , , . , , , , , . , , , , , , (.. ) .