gpt4 book ai didi

R:选择子集而不复制

转载 作者:行者123 更新时间:2023-12-03 06:49:40 25 4
gpt4 key购买 nike

有没有办法选择子集 来自对象(数据框、矩阵、向量)无需复制选定的数据?

我使用相当大的数据集,但从不更改它们。然而,为了方便起见,我经常选择要操作的数据子集。每次都复制一个大子集的内存效率非常低,但是普通索引和 subset (因此 xapply() 系列函数)创建选定数据的副本。所以我正在寻找可以克服这个问题的函数或数据结构。

一些可能适合我的需要并希望在某些 R 包中实现的方法:

  • 写时复制 机制,即仅在您添加或重写现有元素时复制的数据结构;
  • 不可变数据结构 ,只需要为数据结构重新创建索引信息,而不是它的内容(例如通过仅创建包含长度和指向同一 char 数组的指针的小对象来从字符串中创建子字符串);
  • xapply() 不创建子集的类似物。
  • 最佳答案

    试用包ref .具体来说,它的refdata类(class)。

    关于 data.table 你可能遗漏了什么是在分组时(by= 参数)不复制数据子集,所以速度很快。 [从技术上讲,它们只是在一个共享的内存区域中,每个组都可以重用,并使用 memcpy 进行复制,这比 C 中 R 的 for 循环快得多。]
    :=data.table是修改 data.table 的一种方法到位。 data.table与通常的 R 编程风格不同,它不是写时复制的。用户必须调用copy()显式地复制(可能非常大的)表,即使在函数内也是如此。

    你是对的,没有像 refdata 这样的机制。内置 data.table .我明白你的意思,这将是一个不错的功能。 refdata应该在 data.table 上工作, 不过,你可能会觉得 data.frame (但请务必使用 tracemem(DF) 监视副本)。

    还有idata.frame (不可变 data.frame )在包中 plyr你可以试试。

    关于R:选择子集而不复制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9573055/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com