【发布时间】:2015-04-29 23:06:50
【问题描述】:
我在 data.table 中的 .SD 调用中苦苦挣扎。
特别是,我试图识别一组数据中的一些逻辑特征,并在另一个变量中绘制一些识别标记。 .SD 的规范应用,对吧?
从 FAQ 4.5,http://cran.r-project.org/web/packages/data.table/vignettes/datatable-faq.pdf,想象下表:
library(data.table) # 1.9.5
DT = data.table(a=rep(1:3,1:3),b=1:6,c=7:12)
DT[,{ mySD = copy(.SD)
mySD[1, b := 99L]
mySD },
by = a]
## a b c
## 1: 1 99 7
## 2: 2 99 8
## 3: 2 3 9
## 4: 3 99 10
## 5: 3 5 11
## 6: 3 6 12
我已将这些值分配给 b(使用 ':=' 运算符),因此当我重新调用 DT 时,我希望得到相同的输出。但是,出乎意料的是,我遇到了原始表:
DT
## a b c
## 1: 1 1 7
## 2: 2 2 8
## 3: 2 3 9
## 4: 3 4 10
## 5: 3 5 11
## 6: 3 6 12
预期的输出是原始帧,在“b”中进行了持续修改:
DT
## a b c
## 1: 1 99 7
## 2: 2 99 8
## 3: 2 3 9
## 4: 3 99 10
## 5: 3 5 11
## 6: 3 6 12
当然,我可以将此表复制到另一个表中,但这似乎与精神不符。
DT2 <- copy(DT[,{ mySD = copy(.SD)
mySD[1, b := 99L]
mySD },
by = a])
DT2
## a b c
## 1: 1 99 7
## 2: 2 99 8
## 3: 2 3 9
## 4: 3 99 10
## 5: 3 5 11
## 6: 3 6 12
感觉我在这里遗漏了一些基本的东西。
【问题讨论】:
-
如果你还没有,我建议你去看看 Reference Semantics vignette here。
标签: r data.table