4
votes

Comment extraire l'unité de temps lors de l'utilisation de difftime ()?

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.


0 commentaires

3 Réponses :


2
votes

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."


0 commentaires

6
votes

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."))


1 commentaires

@RonakShah Merci .. +1 votre réponse aussi.



0
votes

Vous devriez pouvoir l'obtenir en unités (durée) .


0 commentaires