为什么R内存中的数据分配似乎不符合逻辑?

时间:2015-07-19 20:51:48

标签: r memory

我有2个不同大小的data.frames。因此,我希望在将它们绑定在一起之后看到两个总和大小的对象,但是我想到的结果对象大约为51 Mb。为什么会这样?

>object.size(data1)
764717248 bytes

> object.size(data2)
13426120 bytes

rbind之后两个对象的期望大小将是两个对象的总和,不是吗?:

> 764717248+13426120
[1] 778143368

> data3 <- rbind(data1,data2)

> object.size(data3)
831728336 bytes

1 个答案:

答案 0 :(得分:0)

在R中,有很多抽象需要额外的字节。 Rownames,列名,属性和类型信息都需要的不仅仅是几种类型 - 甚至是单个变量可以查询R的各个类型,这表明即使是单个类型本身也需要额外的字节来存储类型信息。

事实上,我们可以将这个假设扩展到所有R - 所有函数都很可能必须存储它们所采用的参数数量,以及根据名称分配变量时的名称。

总的来说,R中有很多“样板”,可以为用户提供很多“漂亮”的功能。虽然您可以使用更高效的语言(如C或C ++)来编程功能,R本身不是为了速度或效率而设计的,而是为了便于在执行数据分析时使用。