2015-07-19 24 views
2

我有2個不同大小的數據幀。所以,我希望在將它們結合在一起後看到兩者之和的大小的對象,但是由此產生的對象比我想象的要大約51 Mb。爲什麼會發生?爲什麼R內存中的數據分配似乎不合邏輯?

>object.size(data1) 
764717248 bytes 

> object.size(data2) 
13426120 bytes 

的期望rbind後兩個物體的大小將是兩個對象的總和,是不是?:

> 764717248+13426120 
[1] 778143368 

> data3 <- rbind(data1,data2) 

> object.size(data3) 
831728336 bytes 
+0

你的數據框架是怎樣的?當某些列是因素時,'rbind'是棘手的。 – Elvis

+1

這兩個數據框在變量和類型數量上是相同的,所以唯一不同的是行數。說一個是另一個的一個子集,這就是爲什麼我感到困惑。 – daniel

回答

0

在R,有很多抽象的,需要額外的字節。 Rownames,列名,屬性和類型信息都被認爲需要的不僅僅是幾種類型 - 即使是R中的單個變量也可以查詢它們的單獨類型,這表明即使單個類型本身也需要額外的字節來存儲類型信息。實際上,我們可以將這個假設擴展到所有的R - 所有函數很可能必須存儲它們所採用的參數數量,以及當您根據名稱分配變量時的名稱。

總體而言,R中有很多「樣板」,爲用戶提供了許多「不錯」的功能。雖然您可以外部更加高效的語言(如C或C++)來編程您的函數,但R本身不是爲速度或效率而設計的,而是爲了在執行數據分析時易於使用。

相關問題