Linux 如何在R中确定当前工作区中所有对象的大小?(不在WIndows中)
在Windows中,可以执行Linux 如何在R中确定当前工作区中所有对象的大小?(不在WIndows中),linux,r,memory-management,Linux,R,Memory Management,在Windows中,可以执行memory.size()以获取当前R会话中(对象)占用的内存总量 还可以通过print(object.size(thing),units='auto')来了解单个对象的大小,这表示特定数据帧/表占用多少兆字节/千字节 但是,如何实现与打印(object.size(---workspace----)等效的功能呢 循环for(thing in ls())print(object.size(thing),units='auto')打印错误的输出,例如: 64 bytes
memory.size()
以获取当前R
会话中(对象)占用的内存总量
还可以通过print(object.size(thing),units='auto')
来了解单个对象的大小,这表示特定数据帧/表占用多少兆字节/千字节
但是,如何实现与打印(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
这不是我的意思。正确的方法是:
for (thing in ls()) {
print(
object.size(
get(thing)
),
units='auto')
}
这只是略有不同,循环使用
get
指定应该测量的是对象本身的大小,而不是对象的名称。要打印整个工作区的大小,可以尝试以下功能:
workspace.size <- function() {
ws <- sum(sapply(ls(envir=globalenv()), function(x)object.size(get(x))))
class(ws) <- "object_size"
ws
}
workspace.size()
# 35192 bytes
workspace.size这将提供格式良好的输出:
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
基于@sgibb的答案,下面的函数计算任何环境的大小。与这里发布的其他解决方案一样,它不包括嵌套环境,例如R6类
env.size这个问题我在谷歌上搜索了很多次。将答案张贴在此处,以便其他人可以找到。我的答案只是对的改编,但搜索者可能不会使用导致他们提出如此问题的术语。请注意,这并不等同于内存。大小
,这将被低估。例如,在一个普通的工作区中,这给了我约8000字节,而memory.size
给了约25MB。包含baseenv()
会稍微靠近一点,但会稍微超出……我们应该注意,object.size()
是对占用空间的粗略估计。如果在全局环境中有2个共享对象,它们将被计数两次…如果您有任何字符向量,那么将有很多共享对象。请参阅我的答复以了解此的一般版本。