W R, próbuję łączyć i konwertować kilka zestawów danych czasu jako xts z http://www.truefx.com/?page=downloads jednak pliki są duże i istnieje wiele plików, więc to powoduje problemy na moim laptopie. Są one przechowywane jako plik csv, który został skompresowany jako plik zip.zwalnianie pamięci w R
Pobieranie i rozpakowywanie ich jest dość łatwe (chociaż zajmuje dużo miejsca na dysku twardym).
Ładowanie 350MB plików z danymi miesięcznymi do R jest dość proste dzięki nowej funkcji fread()
w pakiecie data.table
.
Dokonuje się pewnych transformacji danych (wewnątrz funkcji), dzięki czemu znaczniki czasowe można łatwo odczytać i wytwarza się środkową kolumnę. Następnie datatable jest zapisywany jako plik RData na dysku twardym, a wszystkie odniesienia do obiektu danych są usuwane z obszaru roboczego, a gc()
jest uruchamiany po usunięciu ... jednak patrząc na sesję R w moim monitorze aktywności (uruchamiane z komputera Mac) ... nadal wygląda na to, że zajmuje prawie 1 GB pamięci RAM ... i rzeczy wydają się nieco opóźnione ... Miałem zamiar załadować kilka lat wartości plików csv w tym samym czasie, przekonwertować je do użytecznych datatables, połącz je, a następnie utwórz pojedynczy obiekt xts, który wydaje się niewykonalny, jeśli tylko jeden miesiąc wykorzystuje 1 GB pamięci RAM.
Wiem, że mogę sekwencyjnie pobierać każdy plik, konwertować go, zapisywać, wyłączać R i powtarzać, aż mam kilka plików RData, które mogę załadować i powiązać, ale miałem nadzieję, że może być skuteczniejszy sposób zrób to, aby po usunięciu wszystkich odwołań do datatable nie powróciło "normalne" lub na poziomie uruchamiania pamięci RAM. Czy istnieją lepsze sposoby czyszczenia pamięci niż gc()
? Wszelkie sugestie będą bardzo mile widziane.
Czy masz te same objawy, jeśli yo użyjesz 'read.csv' zamiast' fread'? – GSee
Wydaje się być związane z http://stackoverflow.com/questions/1467201/forcing-garbage-collection-to-run-in-r-with-the-gc-command – redmode
przy użyciu 'x <- read.csv (...) 'przywołuje użycie pamięci do 1.2GB, a następnie uruchamia' 'rm (x)', a następnie 'gc()', przenosi ją tylko do 894 MB ... wciąż nie w pobliżu oryginalnego ~ 75 MB pamięci RAM .. podczas uruchamiania/inicjowania R. –