Профилирование памяти в R - инструменты для подведения итогов - PullRequest
27 голосов
/ 03 марта 2011

R имеет несколько инструментов для профилирования памяти, таких как Rprofmem(), Rprof() с опцией "memory.profiling=TRUE" и tracemem().Последний может использоваться только для объектов, и, следовательно, он полезен для отслеживания того, сколько раз объект копируется, но не дает обзора по функциям.Rprofmem должен быть в состоянии сделать это, но вывод даже самого простого вызова функции, такого как lm(), дает более 500 строк журнала.Я пытался выяснить, что на самом деле делает Rprof("somefile.log",memory.profile=T), но я не думаю, что действительно понял это.

Последнее, что я смог найти, было это сообщение Томаса Ламли , в котором говорилось, чтои я цитирую:

У меня пока нет инструментов для подведения итогов.

Это было в 2006 году. Есть ли шанс, что теперь есть варианты для некоторых хороших резюме, основанных на Rprofmem(), таинственном выводе Rprof() с memory.profile, установленным TRUE, или на любом другом инструменте?

Ответы [ 2 ]

6 голосов
/ 10 мая 2016

profvis выглядит как решение этого вопроса.

Создает интерактивный файл .html (с использованием htmlwidgets), показывающий профилирование вашего кода.

Хорошая виньетка руководство по его возможностям.

Принимая непосредственно из введения, вы бы использовали его следующим образом:

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")

Что дает

enter image description here

2 голосов
/ 07 марта 2011

Проверьте profr - похоже, именно то, что вы ищете.

...