You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Return.annualized seems to be unnecessarily slow. Seems a simple code tweak (1 line change) can speed it up by 100x? Am I missing something? I'm new to this package.
Minimal, reproducible example
library(xts)
library(PerformanceAnalytics)
# tweaked 1 line from PerformanceAnalytics::Return.annualizedtweaked<-function (R, scale=NA, geometric=TRUE)
{
if (!xtsible(R) & is.na(scale))
stop("'R' needs to be timeBased or xtsible, or scale must be specified.")
if (is.na(scale)) {
freq= periodicity(R)
switch(freq$scale, minute= {
stop("Data periodicity too high")
}, hourly= {
stop("Data periodicity too high")
}, daily= {
scale=252
}, weekly= {
scale=52
}, monthly= {
scale=12
}, quarterly= {
scale=4
}, yearly= {
scale=1
})
}
if (is.vector(R)) {
R= checkData(R)
R= na.omit(R)
n= length(R)
if (geometric) {
result= prod(1+R)^(scale/n) -1
}
else {
result= mean(R) *scale
}
result
}
else {
R= checkData(R, method="xts")
result= apply(zoo::coredata(R), 2, Return.annualized, scale=scale, # tweaked here: R -> zoo::coredata(R)geometric=geometric)
dim(result) = c(1, NCOL(R))
colnames(result) = colnames(R)
rownames(result) ="Annualized Return"return(result)
}
}
dates<- seq(as.Date('2010-01-01'), as.Date('2020-12-31'), by=1)
returns<- rep(0.01, length(dates))
ts<-xts::xts(returns, order.by=dates)
microbenchmark::microbenchmark(times=10, unit='ms', Return.annualized(ts), tweaked(ts))
# Unit: milliseconds# expr min lq mean median uq max neval# Return.annualized(ts) 345.446601 352.530002 368.548451 364.888551 367.3592 423.677401 10# tweaked(ts) 1.390701 1.460401 1.616781 1.552252 1.7372 1.956401 10
print(Return.annualized(ts))
# [,1]# Annualized Return 11.274
print(tweaked(ts))
# [,1]# Annualized Return 11.274
R version 3.6.3 (2020-02-29)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 19044)
Description
Return.annualized
seems to be unnecessarily slow. Seems a simple code tweak (1 line change) can speed it up by 100x? Am I missing something? I'm new to this package.Minimal, reproducible example
R version 3.6.3 (2020-02-29)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 19044)
Matrix products: default
locale:
[1] LC_COLLATE=English_Australia.1252 LC_CTYPE=English_Australia.1252 LC_MONETARY=English_Australia.1252 LC_NUMERIC=C
[5] LC_TIME=English_Australia.1252
attached base packages:
[1] stats graphics grDevices utils methods base
other attached packages:
[1] PerformanceAnalytics_2.0.4 xts_0.12-0 zoo_1.8-8
loaded via a namespace (and not attached):
[1] microbenchmark_1.4.9 BiocManager_1.30.10 compiler_3.6.3 tools_3.6.3 grid_3.6.3 packrat_0.5.0
[7] renv_0.13.2 lattice_0.20-38 quadprog_1.5-8
The text was updated successfully, but these errors were encountered: