2011-03-03 19 views
27

R tiene algunas herramientas para perfiles de memoria, como Rprofmem(), Rprof() con la opción "memory.profiling=TRUE" y tracemem(). El último solo se puede usar en objetos y, por lo tanto, es útil para seguir cuántas veces se copia un objeto, pero no proporciona una descripción general de una función. Rprofmem debería ser capaz de hacer eso, pero la salida de incluso la llamada de función más simple como lm() da más de 500 líneas de registro. Traté de averiguar qué Rprof("somefile.log",memory.profile=T) realmente hace, pero no creo que realmente lo entiendo.memoria de perfiles en I - herramientas para resumir

El último que pude encontrar fue this message of Thomas Lumley, diciendo que, y cito:

Yo todavía no tengo las herramientas para resumir la salida.

Esto fue en 2006. Hay alguna posibilidad de que hay opciones para algunos resúmenes agradables ahora, ya sea basado en Rprofmem(), la misteriosa salida de Rprof() con memory.profile establece TRUE o cualquier otra herramienta?

+8

Ya tenemos ganas de su paquete RprofmemSummary :) –

+0

@Dirk Creo que es una "Buena suerte, pobre muchacho ..." :) –

+0

Me gustaría agregar esta capacidad para profr. Esperando encontrar un estudiante interesado algún día. Podría ser un buen verano de google del proyecto de código si quisiera escribirlo. Estaría feliz de ser mentor. – hadley

Respuesta

6

profvis parece la solución a esta pregunta.

Se genera un archivo html interactiva (usando htmlwidgets) que muestra el perfilado de su código.

El introduction vignette es una buena guía sobre su capacidad.

Tomando directamente de la introducción, se usaría así:

devtools::install_github("rstudio/profvis") 
library(profvis) 

# Generate data 
times <- 4e5 
cols <- 150 
data <- as.data.frame(x = matrix(rnorm(times * cols, mean = 5), ncol = cols)) 
data <- cbind(id = paste0("g", seq_len(times)), data) 
profvis({ 
    data1 <- data # Store in another variable for this run 

    # Get column means 
    means <- apply(data1[, names(data1) != "id"], 2, mean) 

    # Subtract mean from each column 
    for (i in seq_along(means)) { 
     data1[, names(data1) != "id"][, i] <- data1[, names(data1) != "id"][, i] - means[i] 
    } 
}, height = "400px") 

que da

enter image description here

+0

thx amigo, todavía no sabía nada de esto. Herramienta valiosa para seguro. –

+0

@JorisMeys - no se preocupe, solo lo encontré yo mismo. Vale la pena señalar que todavía está en desarrollo, por lo que es un paquete relativamente nuevo. – SymbolixAU

2

Salida profr - parece exactamente lo que estás buscando.

+0

Vaya, nm - acabo de ver el comentario del autor del profr anterior ... –

Cuestiones relacionadas