2014-07-02 19 views
6

Kiedy zapisuję obiekt z R używając save(), co decyduje o wielkości zapisanego pliku? Oczywiście nie jest to ten sam (lub bliski) rozmiar obiektu określony przez object.size().Co decyduje o wielkości zapisanego obiektu w R?

przykład: I odczytu ramkę danych i zapisany przy użyciu

snpmat=read.table("Heart.txt.gz",header=T) 
save(snpmat,file="datamat.RData") 

wielkości pliku datamat.RData jest 360MB.

> object.size(snpmat) 
4998850664 bytes  #Much larger 

Potem przeprowadzono analizę regresji pewne i uzyskuje kolejną adj.snpmat ramki danych o takich samych wymiarach (6820000 rzędów i 80 kolumn).

> object.size(adj.snpmat) 
4971567760 bytes  

zapisać go za pomocą

> save(adj.snpmat,file="adj.datamat.RData") 

Teraz wielkość adj.datamat.RData plików jest 3.3GB. Jestem zdezorientowany, dlaczego oba pliki mają tak różny rozmiar, podczas gdy object.size() daje podobne rozmiary. Każdy pomysł na temat tego, co określa rozmiar zapisanego obiektu, jest mile widziany.

Niektórzy więcej informacji:

> typeof(snpmat) 
[1] "list" 

> class(snpmat) 
[1] "data.frame" 

> typeof(snpmat[,1]) 
[1] "integer" 

> typeof(snpmat[,2]) 
[1] "double"   #This is true for all columns except column 1 

> typeof(adj.snpmat) 
[1] "list" 

> class(adj.snpmat) 
[1] "data.frame" 

> typeof(adj.snpmat[,1]) 
[1] "character" 

> typeof(adj.snpmat[,2]) 
[1] "double"   #This is true for all columns except column 1 
+1

Zapisany plik '.Rdata' jest skompresowany i dlatego powinien być mniejszy. O ile mniejsze będzie zależeć od algorytmu kompresji i twoich danych. – Andrie

+0

W moim przykładzie, jaki może być tego powód? Innymi słowy, czy możesz mi powiedzieć, jakie aspekty danych mają na to wpływ? – Pratyay

+2

@Pratyay Co wiesz o kompresji? Byłoby dobrze, gdybyś przeczytał o tym, ponieważ to jest to, o co prosisz. http://en.wikipedia.org/wiki/Data_compression – Dason

Odpowiedz

0

Twoje macierze są bardzo różne, a więc kompresować bardzo różnie.

Dane SNP zawierają tylko kilka wartości (np. 1 lub 0) i są również bardzo rzadkie. Oznacza to, że kompresja jest bardzo łatwa. Na przykład, jeśli macie macierz wszystkich zer, można pomyśleć o kompresji danych przez podanie pojedynczej wartości (0) oraz wymiarów.

Macierz regresji zawiera wiele różnych typów wartości, a także liczby rzeczywiste (zakładam wartości p, współczynniki itd.). Dzięki temu jest znacznie mniej ściśliwy.

Powiązane problemy