[Rd] reduce limit number of arguments in methods:::cbind
Jeff Ryan
jeff.a.ryan at gmail.com
Wed Dec 3 22:22:24 CET 2008
My 2c:
The real issue for me is that this approach to handling S4 objects by
altering R functions for the worse is incorrect. (by calling
bind_activation)
m <- matrix(1:2e6L) # 2 million obs
> system.time(cbind(m,m))
user system elapsed
0.027 0.017 0.044
> methods:::bind_activation(TRUE)
[1] FALSE
# the additional overhead of cbind is now damaging to cbind S3 methods
> system.time(cbind(m,m))
user system elapsed
0.043 0.034 0.077 [~175% of the original time]
Wouldn't a better near-term approach involve writing S3 methods to dispatch on.
> methods:::bind_activation(FALSE)
> library(Matrix)
> M <- Matrix(1:10)
> cbind(M,M)
M M
[1,] ? ?
> cbind.dgeMatrix <- function(..., deparse.level=1) methods:::cbind(..., deparse.level=deparse.level)
> cbind(M,M)
10 x 2 Matrix of class "dgeMatrix"
[,1] [,2]
[1,] 1 1
[2,] 2 2
[3,] 3 3
[4,] 4 4
[5,] 5 5
[6,] 6 6
[7,] 7 7
[8,] 8 8
[9,] 9 9
[10,] 10 10
# this approach "does no harm" to regular S3 methods
> system.time(cbind(m,m))
user system elapsed
0.028 0.017 0.045
Obviously this negates part of the S4 dispatch value, but that can be
had by calling cbind2 directly.
Jeff
--
Jeffrey Ryan
jeffrey.ryan at insightalgo.com
ia: insight algorithmics
www.insightalgo.com
More information about the R-devel
mailing list