2015-07-19 53 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本身不是为速度或效率而设计的,而是为了在执行数据分析时易于使用。

相关问题