首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >准确地理解data.table何时是对另一个data.table的引用(而不是它的副本

准确地理解data.table何时是对另一个data.table的引用(而不是它的副本
EN

Stack Overflow用户
提问于 2012-04-19 17:19:31
回答 2查看 38.5K关注 0票数 212

我在理解data.table的按引用传递属性时遇到了一些问题。有些操作似乎“破坏”了引用,我想确切地了解到底发生了什么。

在从另一个data.table创建data.table时(通过<-,然后通过:=更新新表),原始表也会被更改。这是预期的,根据以下内容:

?data.table::copystackoverflow: pass-by-reference-the-operator-in-the-data-table-package

下面是一个例子:

代码语言:javascript
复制
library(data.table)

DT <- data.table(a=c(1,2), b=c(11,12))
print(DT)
#      a  b
# [1,] 1 11
# [2,] 2 12

newDT <- DT        # reference, not copy
newDT[1, a := 100] # modify new DT

print(DT)          # DT is modified too.
#        a  b
# [1,] 100 11
# [2,]   2 12

但是,如果我在上面的<-赋值和:=行之间插入一个非基于:=的修改,DT现在不再被修改:

代码语言:javascript
复制
DT = data.table(a=c(1,2), b=c(11,12))
newDT <- DT        
newDT$b[2] <- 200  # new operation
newDT[1, a := 100]

print(DT)
#      a  b
# [1,] 1 11
# [2,] 2 12

因此,newDT$b[2] <- 200行似乎以某种方式“破坏了”引用。我猜这以某种方式调用了一个副本,但我希望完全了解R是如何处理这些操作的,以确保我不会在我的代码中引入潜在的bug。

如果有人能给我解释一下,我将不胜感激。

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10225098

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档