Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何在R中确定当前工作区中所有对象的大小?(不在WIndows中)_Linux_R_Memory Management - Fatal编程技术网

Linux 如何在R中确定当前工作区中所有对象的大小?(不在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

在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
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个共享对象,它们将被计数两次…如果您有任何字符向量,那么将有很多共享对象。请参阅我的答复以了解此的一般版本。