今天遇到了涉及data.table滚动连接的意外行为。我想在整数类型列和数字类型列之间进行滚动连接。正向滚动按预期工作,但向后滚动没有。
dt1<-data.table(x=as.integer(c(1,2)))
dt2<-data.table(x=c(1.5))
setkey(dt1, "x")
setkey(dt2, "x")
dt1[dt2, roll=TRUE] #Expected behavior
x
1: 1
dt1[dt2, roll=-Inf] #Unexpected behavior
x
1: 1
这是一个错误还是记录了这种行为?只是猜测但看起来像data.table在内部将数字列转换为整数而不是将整数列转换为数字。
答案 0 :(得分:2)
这是预期的行为,尽管有埋藏的警告。会发生的事情是dt2$x
被强制转换为整数,因此你的两个卷都没有做任何事情而且它是一个直接合并的值为1.
要查看警告,请使用verbose=TRUE
:
dt1[dt2, verbose = TRUE]
#Coercing 'double' column i.'x' to 'integer' to match type of x.'x'. Please avoid coercion for efficiency.
#Starting bmerge ...done in 0 secs
# x
#1: 1