Z tylko 4 GB pamięci RAM (z systemem Windows 10, więc upewnij się, że około 2 lub więcej realistycznie 1 GB) musiałem być bardzo ostrożny z alokacją.
Używam data.table prawie wyłącznie.
Funkcja „fread” pozwala na podzbiór informacji według nazw pól podczas importu; importuj tylko pola, które są naprawdę potrzebne na początek. Jeśli używasz odczytu R, zeruj fałszywe kolumny natychmiast po zaimportowaniu.
Jak sugeruje 42 , tam, gdzie to możliwe, podzbiorę w kolumnach natychmiast po zaimportowaniu informacji.
Często rm () obiekty ze środowiska, gdy tylko nie są już potrzebne, np. W następnym wierszu po użyciu ich do podzbioru czegoś innego i wywołanie gc ().
„fread” i „fwrite” z data.table mogą być bardzo szybkie w porównaniu z bazowymi odczytami i odczytami R.
Jak sugeruje kpierce8 , prawie zawsze piszę wszystko ze środowiska i przeglądam je z powrotem, nawet z tysiącami / setkami tysięcy małych plików do przejścia. To nie tylko utrzymuje czystość środowiska i utrzymuje niski przydział pamięci, ale prawdopodobnie z powodu poważnego braku dostępnej pamięci RAM R ma skłonność do częstych awarii na moim komputerze; bardzo często. Tworzenie kopii zapasowej informacji na samym dysku, gdy kod przechodzi przez różne etapy, oznacza, że nie muszę zaczynać od samego początku, jeśli ulegnie awarii.
Według stanu na 2017 r. Najszybsze dyski SSD pracują z prędkością około kilku GB na sekundę przez port M2. Mam naprawdę podstawowy dysk SSD Kingston V300 o pojemności 50 GB (550 MB / s), którego używam jako mojego głównego dysku (na nim jest Windows i R). Przechowuję wszystkie informacje masowe na tanim talerzu WD o pojemności 500 GB. Przenoszę zestawy danych na dysk SSD, kiedy zaczynam nad nimi pracować. To, w połączeniu z „fread” i „fwrite”, wszystko działało świetnie. Próbowałem użyć „ff”, ale wolę ten pierwszy. Prędkość odczytu / zapisu 4K może jednak powodować problemy; tworzenie kopii zapasowej ćwierć miliona plików 1k (o wartości 250 MB) z dysku SSD na talerz może zająć wiele godzin. O ile mi wiadomo, nie ma jeszcze dostępnego pakietu R, który mógłby automatycznie zoptymalizować proces „chunkification”; np. sprawdź, ile pamięci RAM ma użytkownik, przetestuj prędkości odczytu / zapisu pamięci RAM / wszystkich podłączonych napędów, a następnie zaproponuj optymalny protokół „chunkification”. Może to spowodować znaczące ulepszenia przepływu pracy / optymalizację zasobów; np. podziel go na ... MB dla pamięci RAM -> podziel na ... MB na dysk SSD -> podziel na ... MB na talerzu -> podziel na ... MB na taśmie. Może wcześniej próbkować zestawy danych, aby nadać mu bardziej realistyczny wskaźnik do pracy.
Wiele problemów, nad którymi pracowałem w R, polega na tworzeniu par kombinacji i permutacji, potrójnych itd., Co sprawia, że posiadanie ograniczonej pamięci RAM jest bardziej ograniczeniem, ponieważ często będą one przynajmniej wykładniczo rozszerzane w pewnym momencie. To sprawiło, że skupiłem dużo uwagi na jakości, a nie na ilości informacji, które trafiają do nich na początku, zamiast próbować je później wyczyścić, a także na sekwencji operacji przygotowujących informacje na początek (zaczynając od najprostsza operacja i zwiększenie złożoności); np. podzbiór, następnie scalanie / łączenie, a następnie tworzenie kombinacji / permutacji itp.
Wydaje się, że korzystanie z podstawowego odczytu i zapisu w niektórych przypadkach przynosi pewne korzyści. Na przykład wykrywanie błędów w ramach „fread” jest tak dobre, że próba wprowadzenia naprawdę niechlujnych informacji do R na początek może być trudna. Baza R wydaje się również znacznie łatwiejsza, jeśli używasz Linuksa. Baza R wydaje się działać dobrze w systemie Linux, Windows 10 zużywa ~ 20 GB miejsca na dysku, podczas gdy Ubuntu potrzebuje tylko kilku GB, pamięć RAM potrzebna dla Ubuntu jest nieco niższa. Ale zauważyłem duże ilości ostrzeżeń i błędów podczas instalowania pakietów stron trzecich w (L) Ubuntu. Nie polecałbym odchodzenia zbyt daleko od (L) Ubuntu lub innych dystrybucji akcji z Linuksem, ponieważ możesz stracić tyle ogólnej kompatybilności, że czyni to proces prawie bezcelowym (myślę, że „jedność” ma zostać anulowana w Ubuntu od 2017 roku ).
Mam nadzieję, że niektóre z nich mogą pomóc innym.