web-dev-qa-db-ja.com

オブジェクトのメモリ使用量を決定しますか?

現在のワークスペース内の各オブジェクトがどれだけRAMを使用しているかを調べたい。これを行う簡単な方法はありますか?

123
Josh Reich

少し前に、この小さなナゲットを here から盗みました。

sort( sapply(ls(),function(x){object.size(get(x))})) 

それは私によく役立っています

168
JD Long

1。オブジェクトサイズ

object-by-objectベースでメモリ割り当てを取得するには、object.size()を呼び出して、関心:

object.size(My_Data_Frame)

(渡された引数が変数でない限り、引用符で囲むか、get呼び出しでラップする必要があります。)変数名、次に引用符を省略し、

名前空間をループして、その中のすべてのオブジェクトのサイズを取得できます。

for (itm in ls()) { 
    print(formatC(c(itm, object.size(get(itm))), 
        format="d", 
        big.mark=",", 
        width=30), 
        quote=F)
}

2。オブジェクトタイプ別

名前空間のメモリ使用量をオブジェクトタイプ別に取得するには、memory.profile()を使用します

memory.profile()

   NULL      symbol    pairlist     closure environment     promise    language 
      1        9434      183964        4125        1359        6963       49425 
special     builtin        char     logical     integer      double     complex 
    173        1562       20652        7383       13212        4137           1 

(別の関数、memory.size()がありますが、Windowsでのみ動作するようです) ;そのため、セッションの任意の時点で使用される最大メモリを取得するには、memory.size(max = T))を使用します。

41
doug

この質問 からlsos()関数を試すことができます:

R> a <- rnorm(100)
R> b <- LETTERS
R> lsos()
       Type Size Rows Columns
b character 1496   26      NA
a   numeric  840  100      NA
R> 
21

この質問はかなり前に投稿され、正当な回答を得ましたが、 gdata とそのll()というライブラリを使用してオブジェクトのサイズを取得するための別の便利なヒントをお知らせします関数。

library(gdata)
ll() # return a dataframe that consists of a variable name as rownames, and class and size (in KB) as columns
subset(ll(), KB > 1000) # list of object that have over 1000 KB
ll()[order(ll()$KB),] # sort by the size (ascending)
12
Blaszard