2012-05-17 16 views
28

Zgodnie z dokumentacją R "Limitów pamięci", nie można przydzielić wektora o długości dłuższej niż 2^31-1. Dzieje się tak dlatego, że liczba całkowita używana jako indeks może wykorzystywać tylko 31 bitów (jeden bit dla znaku). Ale w systemie 64-bitowym powinienem móc przydzielać dłuższe wektory. Dlaczego R narzuca tę samą maksymalną długość w systemach 64-bitowych? Czy istnieje sposób na obejście limitu?Maksymalna długość wektora w R

+7

Należy pamiętać, że ten limit został usunięty w wersji R-3.0.0. –

Odpowiedz

24

Jeśli chcesz pracować z wersją rozwojową R, możesz mieć eksperymentalną obsługę tej funkcji. Z http://stat.ethz.ch/R-manual/R-devel/doc/html/NEWS.html:

LONG wektorami

Istnieje początki wsparcie dla wektorów dłuższych niż 2^31 - 1 elementami platform 64-bitowych. Dotyczy to nieprzetworzonych, logicznych, całkowitych, wektorów podwójnych, złożonych i znakowych, a także list. (Elementy z wektorów znakowych są ograniczone do 2^31 - 1 bajtów.)

Wszystkie aspekty są obecnie eksperymentalne.

Co można zrobić z takimi wektorami jest obecnie nieco ograniczone, , a większość operacji zwróci błąd "długie wektory nieobsługiwane jeszcze ". Mogą być serializowane i niezsizedalizowane, wymuszone, identyczne() i object.size(), praca i środki mogą być obliczane. Ich długości mogą wynosić get i ustawione przez xlength(): długość wywołania() na długim wektorze spowoduje błąd o wartości .

Większość aspektów indeksowania jest dostępna. Ogólnie dwuwartościowe indeksy mogą być używane do dostępu do elementów wykraczających poza 2^31 - 1.

Zobacz link, aby uzyskać więcej informacji. Sam w ogóle tego nie eksperymentowałem, więc nie mogę wypowiedzieć się, czy jest to praktycznie użyteczne, czy nie.

Po przejściu do http://developer.r-project.org/R_svnlog_2011 (i http://developer.r-project.org/R_svnlog_2012) i wyszukaniu "długich wektorów" można uzyskać poczucie wykonywanej pracy.

+6

Świetna propozycja skanowania przez log svn. Widząc, że jest to zasadniczo "ripley, ripley, ripley, ..." kto wykonuje pracę przypomina mi [ten post] (http://dirk.eddelbuettel.com/blog/2007/08/11/) z powrotem w dzień. –

15

Oto kilka szczegółów, które uzupełnią odpowiedź Bena. Ograniczenia wydają się być dziedziczone z języków programowania niższego poziomu używanych do budowania R, szczególnie (podobno) kodu FORTRAN. Więc, oczywiście, przeniesienie R, aby mógł w pełni wykorzystać 64-bitowe systemy adresowania, będzie dużym projektem.

Z R-admin manual:

Nawet na 64-bitowe wersje systemu R istnieją ograniczenia dotyczące wielkości obiektów R (patrz pomoc („pamięć granic”), z których niektóre wynikają z zastosowania 32-bitowe liczby całkowite (szczególnie w kodzie FORTRANA) .Wszystkie kompilacje R, maksymalna długość (liczba elementów) wektora wynosi 2^31-1, około 2 miliardy, a na 64-bitowych rozmiar bloku Ilość przydzielonej pamięci jest ograniczona do 2^34-1 bajtów (8 GB) .Oczekuje się, że zostaną one w końcu podniesione *, ale potrzeba obiektów 8 GB jest (gdy została napisana w 2011 r.) wyjątkowa.

(W tym podręczniku jest też błędny przypis, w którym umieściłem *, zauważając, że "ten komentarz był w instrukcji od 2005". :)