JRR*_*JRR 5 r shallow-copy data.table
我在SO主题中读到了Matt Dowle的答案,该答案涉及在shallow中创建浅表副本的功能data.table。但是,我再也找不到该主题。
data.table没有名为的任何导出函数shallow。有一个内部文件,但没有记录。我可以安全使用吗?它的行为是什么?
我想做的是一个大表的内存有效副本。让我们DT做一个有n列的大表,并使用f一个函数有效地增加一个列。这样有可能吗?
DT2 = f(DT)
Run Code Online (Sandbox Code Playgroud)
与DT2是,其中data.table包含n指向原始地址的列(无较深的副本),并且仅存在一个用于的地址DT2。如果是,我可以追加DT1什么DT2[, col3 := NULL]?
你不能data.table:::shallow安全使用,不。它是故意不导出的,也不适合用户使用。无论是从它本身运作的角度来看,还是从它的名称或论点未来发生变化的角度来看。
话虽如此,您可以决定使用它,只要您可以 i) 保证:=或set*不会被您或您的用户(如果您正在创建包)调用结果或 ii)如果:=或set*调用结果,那么您就可以通过引用更改两个对象。当浅层被 data.table 内部使用时,这就是我们对自己的承诺。
几天前这个答案的更多背景: /sf/answers/3212405171/
在这个问题中,我询问了更大的情况:为什么需要这样做?明确这一点将有助于提高调查 ALTREP 或进行我们自己的参考计数的优先级。
在你的问题中,你提到了你的大局观,这非常有用。因此,您想创建一个函数,将工作列添加到函数内部的 big data.table,但不更改 big data.table。你能解释一下为什么你想创建这样的函数吗?为什么不加载大数据表,直接将临时工作列添加到其中,然后继续。您的 R 会话已经是内存中数据的工作副本,该数据在其他地方持久存在。
请注意,我并不是说不。我并不是说你没有正当理由。我要求找到更多有关该正当理由的信息,以便提高优先级。
如果这不是您看到的答案,则搜索字符串“[data.table]shallow”当前返回 39 个问题或答案。最坏的情况是,你可以通过这些来再次找到它。