【问题标题】:Why data allocation in R memory doesn't seem to be logical?为什么 R 内存中的数据分配似乎不合逻辑?
【发布时间】:2015-10-08 22:40:39
【问题描述】:

我有 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

【问题讨论】:

  • 你的数据框是什么样的?当某些列是因子时,rbind 很棘手。
  • 这两个数据框在变量和类型的数量上是相同的,所以唯一不同的是行数。说,一个是另一个的子集,这就是我感到困惑的原因。

标签: r memory


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-18
    • 1970-01-01
    • 2023-03-05
    相关资源
    最近更新 更多