【问题标题】:Getting memory size of all lists in the current environment [duplicate]获取当前环境中所有列表的内存大小[重复]
【发布时间】:2018-04-12 23:30:49
【问题描述】:

我想获取当前环境下所有列表的内存使用情况。 data.tabletables,它汇总了内存中的所有表,包括大小。这是我现在正在使用的,但我想知道是否有更好的方法:

sapply(ls()[grepl("list",sapply(ls(), function(z) class(get(z))))], 
       function(z) format(object.size(get(z)), units = "Mb") )

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

【问题讨论】:

    标签: r list


    【解决方案1】:

    一种方法是使用eapply 搜索所需环境中的所有对象,检查每个对象是否是一个列表,如果为真则返回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)
    

    【讨论】:

    • 谢谢,为我工作!我会玩弄它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 2016-05-02
    • 2010-10-08
    相关资源
    最近更新 更多