-
Notifications
You must be signed in to change notification settings - Fork 991
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Faster second, minute and hour for objects of class ITime #3158
Labels
Milestone
Comments
maybe time to just make these time helper functions S3 generic?
…On Thu, Nov 22, 2018, 3:38 AM Arun Srinivasan ***@***.*** wrote:
The functions second, minute and hour currently have a faster method, by
bypassing as.POSIXlt(), for POSIXct objectss under UTC. See here
<https://github.com/Rdatatable/data.table/blob/master/R/IDateTime.R#L275%23L298>
.
The faster logic needs to be also included for ITime objects. The fix is
quite simple. The if statement in all these functions need an additional ||
inherits(x, "ITime")
Here's a quick benchmark:
# Current versionsecond <- function(x) {
if (inherits(x,'POSIXct') && identical(attr(x,'tzone'),'UTC')) {
# if we know the object is in UTC, can calculate the hour much faster
as.integer(x) %% 60L
} else {
as.integer(as.POSIXlt(x)$sec)
}
}
# new versionfSecond<- function(x) {
if (inherits(x, "ITime") || (inherits(x,'POSIXct') && identical(attr(x,'tzone'),'UTC'))) {
# if we know the object is in UTC, can calculate the hour much faster
as.integer(x) %% 60L
} else {
as.integer(as.POSIXlt(x)$sec)
}
}
require(data.table)x <- setattr(0:86399, "class", "ITime")y <- sample(x, 50e7, TRUE)
system.time(a1 <- second(y))# user system elapsed # 29.00 10.72 39.78
system.time(a2 <- fSecond(y))# user system elapsed # 3.51 0.56 4.06
identical(a1, a2)# [1] TRUE
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
<#3158>, or mute the thread
<https://github.com/notifications/unsubscribe-auth/AHQQdbHa7TfSlcjynBexbEK-GmSioOBtks5uxavAgaJpZM4Ytxis>
.
|
I agree it'll make things neat, but there are no other classes to consider here AFAICT. I think just an additional if-clause would be sufficient for now therefore. |
There is Dirks nanotime which we already have in suggests. Having if-elses way will be good enough and easy to turn into S3 anyway. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
The functions
second
,minute
andhour
currently have a faster method, by bypassingas.POSIXlt()
, for POSIXct objectss underUTC
. See here.The faster logic needs to be also included for
ITime
objects. The fix is quite simple. The if statement in all these functions need an additional|| inherits(x, "ITime")
Here's a quick benchmark:
The text was updated successfully, but these errors were encountered: