2009-09-08 24 views

Trả lời

134

một thời gian trước, tôi đã đánh cắp nugget này ít từ here:

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

nó đã phục vụ tốt

+12

cũng vậy, nếu bạn muốn tổng bộ nhớ được sử dụng bởi phiên R, người ta có thể thực hiện 'object.size (x = lapply (ls(), get))' và 'print (object.size (x = lapply (ls(), get)), đơn vị = "Mb") ' – tflutre

+1

Điều đó tốt đẹp chút nugged misled tôi, kể từ khi tôi đã có một cái gì đó lớn gọi là 'x' (gợi ý: nó trông nhỏ); đây là một sự thay thế: 'sort (sapply (mget (ls()), object.size))'. – petrelharp

+0

@tflutre Sự hiểu biết của tôi là loại điều này có thể gây hiểu lầm khi R được sao chép khi viết. Nếu tôi lấy some_list <- some_other_list, kích thước của some_list được báo cáo có cùng kích thước với some_other_list, nhưng nếu tôi chỉ đọc từ some_list thì bộ nhớ đang được chia sẻ. Ai đó có thể xác nhận nếu điều này là chính xác? – savagent

21

Bạn có thể thử các lsos() chức năng từ this question:

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

1. theo kích thước đối tượng

để có được cấp phát bộ nhớ trên một đối tượng theo đối tượng cơ sở , gọi object.size() và vượt qua trong các đối tượng quan tâm:

object.size(My_Data_Frame) 

(trừ khi lập luận thông qua tại là một biến, nó phải được trích dẫn, nếu không được bao bọc trong tên biến số nhận được.), sau đó bỏ qua các dấu ngoặc kép,

bạn có thể lặp qua không gian tên của mình và nhận được kích thước của tất cả các đối tượng trong đó, như vậy :

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

2. theo loại đối tượng

để có được sử dụng bộ nhớ cho không gian tên của bạn, theo loại đối tượng, sử dụng 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 

(Có chức năng khác , memory.size() nhưng tôi đã nghe và đọc rằng nó chỉ có vẻ hoạt động trên Windows. Nó chỉ trả về một giá trị bằng MB; do đó, để có được bộ nhớ tối đa được sử dụng bất kỳ lúc nào trong phiên, hãy sử dụng memory.size (max = T)).

7

Câu hỏi này đã được đăng và có câu trả lời hợp pháp rất nhiều, nhưng tôi muốn cho bạn biết một mẹo hữu ích khác để nhận kích thước của một đối tượng sử dụng thư viện có tên gdata và chức năng 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) 
Các vấn đề liên quan