J'ai un exemple de code qui contient une boucle for et crée des tracés comme celui-ci (mes données réelles créent plusieurs milliers de tracés):
xy <- structure(list(NAME = structure(c(2L, 3L, 1L, 1L), .Label = c("Cisco","JOHN", "STEPH"), class = "factor"), ID = c(41L, 49L, 87L, 87L), X_START_YEAR = c(1965L, 1948L, 1959L, 2003L), Y_START_VALUE = c(940L,-1760L, 110L, 866L), X_END_YEAR = c(2005L, 2000L, 2000L, 2007L), Y_END_VALUE = c(940L, -1760L, 110L, 866L), LC = structure(c(1L,1L, 2L, 2L), .Label = c("CA", "US"), class = "factor")), .Names = c("NAME", "ID", "X_START_YEAR", "Y_START_VALUE", "X_END_YEAR", "Y_END_VALUE","LC"), class = "data.frame", row.names = c(NA, -4L))
ind <- split(xy,xy$ID) # split by ID for different plots
# Plots
for (i in ind){
xx = unlist(i[,grep('X_',colnames(i))])
yy = unlist(i[,grep('Y_',colnames(i))])
fname <- paste0(i[1, 'ID'],'.png')
png(fname, width=1679, height=1165, res=150)
par(mar=c(6,8,6,5))
plot(xx,yy,type='n',main=unique(i[,1]), xlab="Time [Years]", ylab="Value [mm]")
i <- i[,-1]
segments(i[,2],i[,3],i[,4],i[,5],lwd=2)
points(xx, yy, pch=21, bg='white', cex=0.8)
dev.off()
}
Pour voir la progression de la boucle for, je serais intéressé à incorporer une barre de progression à mon code. Comme je l'ai trouvé dans la documentation R, il y a le txtProgressBar
http://stat.ethz.ch/R-manual/R-patched/library/utils/html/txtProgressBar.html À partir de l'exemple de cette page, je comprends que vous devez écrire la boucle for dans une fonction pour l'appeler ensuite, ce que je lutte avec mon exemple.
Comment pourrais-je implémenter une barre de progression dans la boucle for?
pour que la barre de progression fonctionne, vous avez besoin d'un numéro pour suivre vos progrès. c'est l'une des raisons pour lesquelles je préfère en règle générale utiliser avec (i in 1:length(ind))
au lieu de mettre directement l'objet que je veux là. Sinon, vous allez simplement créer une autre variable stepi
que vous faites stepi = stepi + 1
à chaque itération.
vous devez d'abord créer l'objet progressbar en dehors de la boucle
pb = txtProgressBar(min = 0, max = length(ind), initial = 0)
à l'intérieur, vous devez mettre à jour à chaque itération
setTxtProgressBar(pb,stepi)
ou
setTxtProgressBar(pb,i)
Cela fonctionnera mal si la boucle contient également des commandes print
Vous pouvez en écrire un très simple à la volée pour afficher le pourcentage achevé:
n <- 100
for (ii in 1:n) {
cat(paste0(round(ii / n * 100), '% completed'))
Sys.sleep(.05)
if (ii == n) cat(': Done')
else cat('\014')
}
# 50% completed
Ou un pour répliquer la barre de texte:
n <- 100
for (ii in 1:n) {
width <- options()$width
cat(paste0(rep('=', ii / n * width), collapse = ''))
Sys.sleep(.05)
if (ii == n) cat('\014Done')
else cat('\014')
}
# ============================