data.table joins - 选择i参数中的所有列

Mic*_*ele 3 r data.table

加入两个data.table我可以指定我想要列的表,比如

X[Y, i.id] # `id` is taken from Y
Run Code Online (Sandbox Code Playgroud)

我的问题是我有一个大约80列的大表.每天晚上都会发生数据刷新,根据一些参数,某些行会被新版本的表(同一个表,只是新数据)所取代.

current <- data.table(id=1:4, var=1:4, var2=1:4, key="id")
new <- data.table(id=1:4, var=11:14, var2=11:14, key="id")
current[new[c(1,3)], `:=`(var=i.var, var2=i.var2)]
> current
   id var var2
1:  1  11   11
2:  2   2    2
3:  3  13   13
4:  4   4    4
Run Code Online (Sandbox Code Playgroud)

正如我所说,在我的实际情况中,我有更多的列(除了rbind()两个表的部分)我想知道如何选择连接中使用的所有列data.table作为i参数?我可以花半个小时硬编码所有这些,但它不是一个可维护的代码(以防将来新的列添加到表中).

Aru*_*run 5

如何构建j-expression和正确eval的呢?

nc = names(current)[-1L]
nn = paste0("i.", nc)
expr = lapply(nn, as.name)
setattr(expr, 'names', nc)
expr = as.call(c(quote(`:=`), expr))

> current[new[c(1,3)], eval(expr)]
> current
##    id var var2
## 1:  1  11   11
## 2:  2   2    2
## 3:  3  13   13
## 4:  4   4    4
Run Code Online (Sandbox Code Playgroud)