2011-11-18 65 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也是最好的方法(这两个)。