2013-03-10 12 views
5

Muszę wielokrotnie serializować (duże) obiekty R. Aby uniknąć wielokrotnego zbierania śmieci z wynikowych nieprzetworzonych wektorów (po profilowaniu okazuje się, że połowa mojego czasu pracy skryptu została wydana w gc!) Chciałbym poprosić R, aby zapisał bezpośrednio w buforze pamięci - zawsze takim samym, jak po każdej serializacji nazwałem funkcję C z .C, która działałaby bezpośrednio na tym buforze pamięci; to wynik tej funkcji C, która mnie interesuje.Połączenie z pamięcią (R)

Czy to możliwe? Jak nierozsądne jest to?

Z góry dziękuję.

+0

Możesz zredukować aktywność GC, ustawiając większy rozmiar pamięci init za pomocą --min-nsize i --min-vsize. Ale to nie rozwiąże twojego problemu. Sprawdź swój system operacyjny pod kątem limitów (Linux ulimit). – tfb785

Odpowiedz

1

Być może nie zrozumiałam twojego problemu, ale dlaczego nie używasz bezpośrednio obiektu R w kodzie C++ za pomocą Rcpp. Nie będzie kopii, a ty nie potrzebujesz żadnej serializacji.

+0

W czasie, gdy zadawałem pytanie, nie używałem Rcpp, więc nie byłem zbyt usatysfakcjonowany twoją odpowiedzią. Teraz, kiedy używam Rcpp, widzę, że twoja sugestia jest najlepsza z możliwych. Więc oznaczam to jako zaakceptowane! Do każdego przyszłego czytnika: ** LEARN RCPP! ** – Elvis