2011-11-18 36 views
3

我只是好奇,不管解釋性如何,以長格式或寬格式存儲數據是否更高效?我已經使用object.size()來確定內存中的大小,但它們並沒有顯着差異(長度在大小上略高效),並且該值只是和估計的。寬格式或長格式數據的效率更高嗎?

在原始尺寸之上,我還想知道哪種格式在建模時被操作的效率更高。

+0

以另一種方式提問,在1000 * 10或100 * 100的矩陣上進行矩陣/數據處理效率更高嗎? 再次感謝。 – MKao

回答

4

兩個不同matrix ES的內存使用情況應該是相同的:

> object.size(long <- matrix(seq(10000), nrow = 1000)) 
40200 bytes 
> object.size(square <- matrix(seq(10000), nrow = 100)) 
40200 bytes 

在效率的任何差異將通過低效率,使用R相形見絀,所以幾乎不需要考慮,如果它們甚至可測量。

的情況是一個非常data.frame不同,因爲它是作爲vectorlist A S實現:

> object.size(as.data.frame(long)) 
41704 bytes 
> object.size(as.data.frame(square)) 
50968 bytes 

這樣做的時候效率將取決於正是你想做的事。

+0

謝謝邁克爾,我對矩陣和數據框架做了完全相同的測試,並得出了相同的結論。 我想知道說這兩種不同格式的效率時,由處理矩陣(如LAPACK)的基礎算法和各種模型中使用的算法實現。 – MKao

+0

哪種算法?提供一些您想要比較效率的示例代碼。 –

+0

我沒有比較具體的例子,但我一般問。哪種格式適用於R中的大多數算法/操作。如果您要向某人提供建議,您會推薦哪一種?爲什麼? – MKao

1

對於矩陣來說,絕對沒有區別。對於該矩陣的數據幀也是如此。改造矩陣的形狀僅僅是分配尺寸屬性...大部分。

如果您打算以某種方式對數據進行分類並添加更多信息,那麼寬度通常會更有效的存儲方式,但長期處理通常會更有效。這不是長格式的必要屬性,它的空間效率較低,但通常情況下,在廣泛的列名中將會有一個複合變量描述,這些描述將被分隔開來,並給出一個新列或多個長列。因此,這些裁員將會佔用更多的空間。在處理方面,更容易彙總長數據或選擇特定案例進行刪除,而不是使用具有多元列指定的寬格式。

如果數據不是完美的矩形(或立方體等),long也是最好的方法(這兩個)。

相關問題