如何确定R中当前工作区中所有对象的大小? (不在WIndows)

在Windows中, 只有一个可以执行memory.size()来获取当前R会话中(对象)所占用的内存总量。

也可以通过print( object.size( thing ), units='auto')来理解单个对象的大小,该print( object.size( thing ), units='auto')表示特定的dataframe/表占用了多less兆字节/千字节。

但如何做相当于print( object.size( ---workspace--- ))

循环for (thing in ls()) print( object.size( thing ), units='auto' )打印错误的输出,比如:

 64 bytes 72 bytes 88 bytes 88 bytes 64 bytes 64 bytes 64 bytes 64 bytes 64 bytes 64 bytes 64 bytes 64 bytes 64 bytes 64 bytes 72 bytes 88 bytes 64 bytes 64 bytes 64 bytes 64 bytes 64 bytes 64 bytes 64 bytes 64 bytes 64 bytes 64 bytes 64 bytes 

这不是我的意思。

要打印整个工作区的大小,可以尝试以下功能:

 workspace.size <- function() { ws <- sum(sapply(ls(envir=globalenv()), function(x)object.size(get(x)))) class(ws) <- "object_size" ws } workspace.size() # 35192 bytes 

正确的方法是:

 for (thing in ls()) { print( object.size( get(thing) ), units='auto') } 

这与循环使用get略有不同,它指定了它应该被测量的对象本身的大小,而不是对象名称

这给出了一个很好的格式化输出:

 size = 0 for (x in ls() ){ thisSize = object.size(get(x)) size = size + thisSize message(x, " = ", appendLF = F); print(thisSize, units='auto') } message("total workspace is ",appendLF = F); print(size, units='auto') 

喜欢这个:

 a = 3.7 Kb ACE1 = 244.3 Kb etc.. zfact_o = 48 bytes total is 130.9 Mb