获取当前环境中所有列表的内存大小

时间:2017-10-31 17:40:47

标签: r list

我想获取当前环境中所有列表的内存使用情况。 class Foo: def __init__(self, a): self.a = a @property def b(): return "b" if self.a else None @property def c(): return "c" if self.a else None @property def d(): return "d" if self.b else None @property def e(): return "e" if self.b else None @property def f(): return "f" if self.b else None data.table汇总内存中的所有表,包括大小。这就是我现在正在使用的内容,但我想知道是否有更好的方法:

tables

我已经看过Determining memory usage of objects?Tricks to manage the available memory in an R session,但他们似乎更多地分别了解特定项目的使用情况或管理内存。我想要的是获取所有列表(此示例)或遵循某个命名约定的所有项目的内存使用情况。 谢谢!

1 个答案:

答案 0 :(得分:1)

一种方法是使用eapply搜索所需环境中的所有对象,检查每个对象是否为列表,如果为TRUE则返回object.size,否则返回NA。

eapply(as.environment(-1),
       FUN=function(x) if(is.list(x)) format(object.size(x), units = "Mb") else NA)
$a
[1] "7.2 Mb"

$b
[1] "72.5 Mb"

$f
[1] NA

as.environment(-1)告诉eapply遍历调用它的环境,这是全局环境。

此外,ls.str可能在此处返回列表对象的str

ls.str(mode = "list")
a : List of 2
 $ : int [1:1000000] 1 2 3 4 5 6 7 8 9 10 ...
 $ : int [1:899999] 2 3 4 5 6 7 8 9 10 11 ...
b : List of 2
 $ : int [1:10000000] 1 2 3 4 5 6 7 8 9 10 ...
 $ : int [1:8999999] 2 3 4 5 6 7 8 9 10 11 ...

数据

#rm(list=ls())

f <- function() return(1)
a <- list(1:1e6, 2:9e5)
b <- list(1:1e7, 2:9e6)