32

R 有一些用于内存分析的工具,例如 Rprofmem()Rprof()带有选项"memory.profiling=TRUE"tracemem(). 最后一个只能用于对象,因此对于跟踪对象被复制的次数很有用,但不提供基于函数的概述。Rprofmem应该能够做到这一点,但即使是最简单的函数调用的输出也会lm()给出超过 500 行的日志。我试图弄清楚Rprof("somefile.log",memory.profile=T)实际上做了什么,但我不认为我真的明白了。

我能找到的最后一个是Thomas Lumley 的这条消息,他这么说,我引用:

我还没有工具来总结输出。

那是在 2006 年。现在有没有可能基于with set TRUE 或任何其他工具Rprofmem()的神秘输出来提供一些不错的摘要?Rprof()memory.profile

4

2 回答 2

6

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

这使

在此处输入图像描述

于 2016-05-10T00:58:50.457 回答
2

查看profr - 它似乎正是您正在寻找的。

于 2011-03-07T03:13:02.467 回答