mch*_*hen 14 r data.table
当通过引用data.table使用来自第二列的列进行分配时data.table,结果是不一致的.当两个data.tables 的键列都没有匹配时,似乎y := y完全忽略了分配表达式- 甚至NA不返回s.
library(data.table)
dt1 <- data.table(id = 1:2, x = 3:4, key = "id")
dt2 <- data.table(id = 3:4, y = 5:6, key = "id")
print(dt1[dt2, y := y])
## id x # Would have also expected column: y
## 1: 1 3 # NA
## 2: 2 4 # NA
Run Code Online (Sandbox Code Playgroud)
但是,当存在部分匹配时,不匹配的列具有占位符NA.
dt2[, id := 2:3]
print(dt1[dt2, y := y])
## id x y
## 1: 1 3 NA # <-- placeholder NA here
## 2: 2 4 5
Run Code Online (Sandbox Code Playgroud)
这会对后来的代码造成严重破坏,该代码假定y在所有情况下都存在列.否则,我不得不编写繁琐的额外检查以考虑这两种情况.
有这种不一致的优雅方法吗?
通过最近的提交,这个问题#759现已在 v1.9.7 中修复。它按预期工作nomatch=NA(当前默认值)。
require(data.table)
dt1 <- data.table(id = 1:2, x = 3:4, key = "id")
dt2 <- data.table(id = 3:4, y = 5:6, key = "id")
dt1[dt2, y := y][]
# id x y
# 1: 1 3 NA
# 2: 2 4 NA
Run Code Online (Sandbox Code Playgroud)