data.table当没有找到匹配时,内部连接会产生错误

问题描述:

我想使用内部连接来连接两个data.table。可能找不到匹配,然后我想要一个空的data.table和正确的col名称。data.table当没有找到匹配时,内部连接会产生错误

dt1 <- data.table(A = c(1,2), B = c(1,2)) 
dt2 <- data.table(A = c(3,4), D = c(3,4)) 
setkey(dt1, A) 
setkey(dt2, A) 
dt1[dt2, nomatch = 0] 
Error in xj[i] : invalid subscript type 'list' 
merge(dt1, dt2, 
     all.x = F, 
     all.y = F) 

Empty data.table (0 rows) of 3 cols: A,B,D 

第二种方法给了我想要的答案。但我更喜欢第一种语法,因为它速度更快。有人知道我如何解决这个错误,而不使用trycatch语句。

+1

在最近版本的data.table,你不需要使用'setkey',这样就可以减少这种到一行代码:'dt1 [dt2,on =“A”,nomatch = 0]'。有关详细信息,请阅读[data.table页面](https://github.com/Rdatatable/data.table/wiki/Getting-started)上的自动索引部分。 – lmo

我不能从第一个例子重现你的错误。我假定你的意思

dt1[dt2, nomatch = 0] 

我得到:

Empty data.table (0 rows) of 3 cols: A,B,D 

基于R的最新版本,并data.table

我觉得这只是一个错字有:

library(data.table) 
dt1 <- data.table(A = c(1,2), B = c(1,2)) 
dt2 <- data.table(A = c(3,4), D = c(3,4)) 

setkey(dt1, A) 
setkey(dt2, A) 
dt1[dt2, nomatch = 0] #instead of t1[t2, nomatch = 0] 
Empty data.table (0 rows) of 3 cols: A,B,D