Description Usage Arguments Details Note See Also Examples
Collect expressions, timings, nrows in-out when possible. Optionally log to database.
1 2 3 4 | timing(expr, in.n = NA_integer_, tag = NA_character_, .timing = TRUE,
.timing.name = getOption("dwtools.timing.name"),
.timing.conn.name = getOption("dwtools.timing.conn.name"),
verbose = getOption("dwtools.timing.verbose"))
|
expr |
expression. |
in.n |
integer manually provided input object nrow. |
tag |
character custom processing message to be logged with that entry. Vector will be collapse to scalar by |
.timing |
logical easy escape timing function without timing. |
.timing.name |
character |
.timing.conn.name |
character, when NULL then timings logs are stored in-memory, see get.timing. |
verbose |
integer, if greater than 0 then print debugging messages. It will use tag argument. It is designed to serve verbose functionallity for user processes, not for the dwtools functions. |
Use option options("dwtools.timing"=TRUE)
to turn on timing measurment in functions which supports timing measurement (e.g. db, build_hierarchy). To log timing to db connection, setup options("dwtools.db.conns"
, provide connection name to options("dwtools.timing.conn.name"="sqlite1")
and target table options("dwtools.timing.name"="dwtools_timing")
(default) otherwise timing will logged to in-memory table, which can be accessed by get.timing()
.
Timing as attribute is available for non NULL results of expr, to make timing of NULL result function provide connection name in getOption("dwtools.timing.conn.name")
, may be also csv connection, read more at db.
When using verbose user should use either dwtools.timing.verbose
option or dwtools.verbose
option, using both at the same time may result a mess, see last example.
get.timing, db, build_hierarchy, dbCopy
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | suppressPackageStartupMessages(library(dwtools))
# populate DT
DT = dw.populate(N=1e5, scenario="fact")
# classic time measurement
system.time(
DT[,lapply(.SD,sum),by=list(geog_code,time_code,curr_code),.SDcols=c("amount","value")]
)
# timing to R session memory
options("dwtools.timing.conn.name"=NULL) # default
r = timing(
DT[,lapply(.SD,sum),by=list(geog_code,time_code,curr_code),.SDcols=c("amount","value")],
in.n = nrow(DT)
)
print(r)
get.timing() # trunc expression field
get.timing(FALSE) # return full expression field
get.timing(TRUE) # omit expr field
# some more timing
invisible(sapply(1:3/10, function(time) timing(Sys.sleep(time))))
get.timing()
# timing and keep parameters value instead of variable symbol
invisible(sapply(3:1/10, function(time) eval(bquote(timing(Sys.sleep(.(time)))))))
get.timing()
purge.timing() # clear in-memory timing logs
get.timing()
# timing to db
library(RSQLite)
sqlite1 = list(drvName="SQLite",dbname="sqlite1.db")
sqlite1$conn = dbConnect(SQLite(), dbname=sqlite1$dbname)
options("dwtools.db.conns"=list(sqlite1=sqlite1))
options("dwtools.timing.conn.name"="sqlite1")
#options("dwtools.timing.name"="dwtools_timing") # default, timing table name
r = timing(
DT[,lapply(.SD,sum),by=list(geog_code,time_code,curr_code),.SDcols=c("amount","value")],
nrow(DT)
)
get.timing() # no in-memory logs
db("dwtools_timing") # query timing log from db
# timing db function, scalar
r = timing(db(DT, "sales"), nrow(DT))
db("dwtools_timing")
db("sales")
db("DROP TABLE sales")
# timing vectorized db function
r = db(DT, c("sales","sales_20141211"),timing=TRUE) # insert DT to two tables, including timing
db("dwtools_timing")
# auto timing, supported functions: db, build_hierarchy, dbCopy
options("dwtools.timing"=TRUE)
r = db(DT, "sales")
db("dwtools_timing")
# timing logs to in-memory (still by auto timing option)
options("dwtools.timing.conn.name"=NULL)
r = db(DT, c("sales","sales_20141211")) # insert DT to two tables
get.timing()
## clean up
dbDisconnect(sqlite1$conn)
file.remove(sqlite1$dbname)
options("dwtools.db.conns"=NULL,"dwtools.timing.conn.name"=NULL,"dwtools.timing"=FALSE)
|
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.