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语句。
答
我不能从第一个例子重现你的错误。我假定你的意思
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
在最近版本的data.table,你不需要使用'setkey',这样就可以减少这种到一行代码:'dt1 [dt2,on =“A”,nomatch = 0]'。有关详细信息,请阅读[data.table页面](https://github.com/Rdatatable/data.table/wiki/Getting-started)上的自动索引部分。 – lmo