Muitas vezes tenho um código que se parece com
rbind.oc.by <- function (indata, INDICES, FUN, ...) {
result <- by( indataframe, INDICES, FUNIN, ... )
t(simplify2array(result))
}
mynewdata <- rbind.oc.by( dataframe, dataframe$variable, function(dd) { with(dd, ... } )
Então, estou testando:
set.seed(0)
if (!exists("X")) {
X <- lapply( 1:10000000, function(i) {
c(a=rnorm(1), b=rnorm(1), x="A", y= as.logical(rnorm(1)))
})
}
## R CMD Rprof testprof.out
Rprof("testprof.out")
intimealloc <- function() {
as.data.frame(do.call("rbind", X))
}
v1 <- intimealloc()
firstalloc <- function() {
simplify2array( t( X ))
}
v2 <- firstalloc()
Rprof(NULL)
simplify2array()
é muito bom, cerca de 8 vezes mais rápido que do.call("rbind")
. ainda assim, ainda estou me perguntando se há uma maneira de escrever uma versão especializada mais rápida que simplify2array()
se baseie no fato de que os resultados são NULL ou todos no mesmo quadro de dados. presumivelmente não, mas pensei em perguntar.