2013-12-12 9 views
8

Czy istnieje możliwość tłumienia wszystkich komunikatów gc() w R?Zablokuj wyjście gc()

Normalnie jak suppressWarnings(gc()) lub suppressMessages(gc()) nie działają. Sam gc() posiada opcję verbose ale to nie działa jak lubię:

> gc(verbose=TRUE) 
Garbage collection 375 = 234+40+101 (level 2) ... 
17.9 Mbytes of cons cells used (41%) 
171.2 Mbytes of vectors used (43%) 
used (Mb) gc trigger (Mb) max used (Mb) 
Ncells 334493 17.9  818163 43.7 818163 43.7 
Vcells 22431904 171.2 52178020 398.1 50193465 383.0 
> gc(verbose=FALSE) 
used (Mb) gc trigger (Mb) max used (Mb) 
Ncells 334496 17.9  818163 43.7 818163 43.7 
Vcells 22431916 171.2 52178020 398.1 50193465 383.0 

Z góry dzięki!

Best, Ruben

+2

Wydaje się to trochę dziwne, ponieważ jedynym zwykłym powodem wywołania 'gc' jest zobaczenie tego wyjścia. Jak pisze Hadley, "nigdy nie ma sensu dzwonić do gc(), poza tym, aby sprawdzić, ile pamięci jest w użyciu." R automatycznie wywoła funkcję "zbierania śmieci", kiedy potrzebuje więcej miejsca. Zobacz http://adv-r.had.co.nz/memory.html – Aaron

+1

@Aaron: Jak kontynuowano w '? Gc':" _Jednak może być użyteczne wywoływanie gc po usunięciu dużego obiektu, ponieważ może poprosić R o zwrócenie pamięci systemowi operacyjnemu. "" W szczególności używam go, gdy jestem), funkcji czasu do porównywania prędkości i b) podczas używania 'read.xlsx' dla większych arkuszy kalkulacyjnych - natknąłem się na problemy przepełnienia pamięci bez 'gc()' po odczytaniu w takich obiektach. – MichaelChirico

Odpowiedz

18

Czasami używam invisible(gc()).

+0

Znacznie lepiej niż moje "nie ładne" podejście. Zawsze można go zawijać, tj. 'Mygc <-function (...) invisible (gc (...))' –

+0

Działa idealnie. Dzięki! – DrewsRM

0

Nie dość, ale

foo <- gc();rm foo 

zadba o niego