J'exécute actuellement un code de boucle for et à la fin de chaque boucle, je mesure la durée de la boucle et j'imprime un message qui indique à l'utilisateur combien de temps la boucle a duré.
Pour obtenir la durée que j'utilise
print(paste("Loop", i, "took", duration, "to run.")). "Loop 5 took 10.5 to run"
Et voici comment j'imprime l'instruction
print(paste("Loop", i, "took", duration, "to run.")).
Le Le problème est que la durée de chaque boucle peut aller de 30 secondes à 1 heure. Mettre la durée à l'intérieur de la pâte la transforme simplement en un nombre sans l'unité.
eg
duration <- difftime(end_time, start_time)
Comment puis-je obtenir l'unité à partir du difftime () afin d'obtenir quelque chose comme: "Boucle 5 a pris 10,5 minutes pour s'exécuter. "
PS: Certains peuvent suggérer de standardiser la durée en déclarant l'argument" unit "dans difftime () mais je veux que la durée soit facilement comprise par l'utilisateur, c'est pourquoi j'ai réglé l'unité sur "auto" par défaut.
3 Réponses :
Une façon est de capturer la sortie de difftime
car il utilise capture.output
start_time <- as.POSIXct('2019-01-01 02:34:00') end_time <- as.POSIXct('2019-01-01 02:34:50') sent <- capture.output(difftime(end_time, start_time)) paste("Loop 5 took",sub("Time difference of ","", sent) , "to run.") #[1] "Loop 5 took 50 secs to run."
Vous pouvez maintenant modifier la sortie pour le rendre significatif, dites supprimer "Décalage horaire de" de la sortie
sent <- capture.output(difftime(end_time, start_time)) paste("Loop 5 took",sub("Time difference of ","", sent) , "to run.") #[1] "Loop 5 took 40 mins to run."
Pour une autre entrée
start_time <- as.POSIXct('2019-01-01 02:34:00') end_time <- as.POSIXct('2019-01-01 03:14:00') paste("Loop 5 took", capture.output(difftime(end_time, start_time)), "to run.") #[1] "Loop 5 took Time difference of 40 mins to run."
Appelez unités
depuis durée
pour obtenir l'unité et obtenir la valeur numérique en sous-définissant durée
:
> print(paste("Loop", 1, "took", round(duration[[1]], 2), units(duration), "to run.")) [1] "Loop 1 took 5.9 days to run."
Voici un exemple:
start_time <- Sys.time() # few days later end_time <- as.Date("2019-01-23") duration <- difftime(end_time, start_time) print(paste("Loop", 1, "took", round(duration[[1]], 2), units(duration), "to run."))
Résultat:
[1] "Loop 1 took 6.97 secs to run."
L'unité serait automatique en fonction de la plage de durée. Voir cet autre exemple:
start_time <- Sys.time() # few seconds later end_time <- Sys.time() duration <- difftime(end_time, start_time) print(paste("Loop", 1, "took", round(duration[[1]], 2), units(duration), "to run."))
Résultat:
print(paste("Loop", i, "took", round(duration[[1]], 2), units(duration), "to run."))
@RonakShah Merci .. +1 votre réponse aussi.
Vous devriez pouvoir l'obtenir en unités (durée)
.