R X[Y]将语法与';在';论点

R X[Y]将语法与';在';论点,r,data.table,R,Data.table,这个问题是前一个问题的后续问题: 我现在试着用马特·道尔建议的方式使用“开”的论点。我对它不起作用感到困惑。我想知道这是否仅适用于data.table的1.9.7版 packageVersion('data.table') # [1] ‘1.9.6’ DT1 = data.table(x1 = c("b", "c", "a", "b", "a", "b"), x2a = as.character(1:6), m1 = seq(10, 60, by = 10

这个问题是前一个问题的后续问题:

我现在试着用马特·道尔建议的方式使用“开”的论点。我对它不起作用感到困惑。我想知道这是否仅适用于data.table的1.9.7版

packageVersion('data.table')
# [1] ‘1.9.6’

DT1 = data.table(x1 = c("b", "c", "a", "b", "a", "b"), 
                 x2a = as.character(1:6), m1 = seq(10, 60, by = 10))
DT1
#    x1 x2a m1
# 1:  b   1 10
# 2:  c   2 20
# 3:  a   3 30
# 4:  b   4 40
# 5:  a   5 50
# 6:  b   6 60

DT2 = data.table(x1 = c("b", "d", "c", "b" ,"a", "a"),
                 x2b = c(1, 4, 7, 6, " ", " ") ,m2 = 5:10)
DT2
#    x1 x2b m2
# 1:  b   1  5
# 2:  d   4  6
# 3:  c   7  7
# 4:  b   6  8
# 5:  a      9
# 6:  a     10

#### merge command works fine
rtL <- merge(DT1, DT2, by.x = c('x1', 'x2a'),
             by.y = c('x1', 'x2b'), all.x = TRUE)
rtL
#    x1 x2a m1 m2
# 1:  a   3 30 NA
# 2:  a   5 50 NA
# 3:  b   1 10  5
# 4:  b   4 40 NA
# 5:  b   6 60  8
# 6:  c   2 20 NA   

#### Join with the X[Y] syntax with the 'on' argument
rtL2 <- DT2[DT1, on = c('x1', x2a = 'x2b')]
forderv(x,by=rightcols)中的
错误
by
值-2147483648超出范围[1,3]

在我看来,
rtL2
版本更为正确


如何解释错误消息?我在这里做错了什么?

事实上,这是1.9.6中的一个问题,该问题已在开发版本中修复

问题(除了切换订单外)在于您没有在
DT2
中将对应项命名为
x1
,请参阅:

  • on=
    连接时,
    X[Y,on=c(A=“A”,b=“c”)]
    现在可以指定为
    X[Y,on=c(“A”,b=“c”)]
    ,完全关闭
  • 关于1.9.6,以下工程:

    packageVersion('data.table')
    # [1] ‘1.9.6’
    DT1[DT2, on = c(x1 = "x1", x2a = "x2b")]
    #    x1 x2a m1 m2
    # 1:  b   1 10  5
    # 2:  d   4 NA  6
    # 3:  c   7 NA  7
    # 4:  b   6 60  8
    # 5:  a     NA  9
    # 6:  a     NA 10
    

    …可能是由于
    DT2
    中缺少
    x2b
    packageVersion('data.table')
    # [1] ‘1.9.6’
    DT1[DT2, on = c(x1 = "x1", x2a = "x2b")]
    #    x1 x2a m1 m2
    # 1:  b   1 10  5
    # 2:  d   4 NA  6
    # 3:  c   7 NA  7
    # 4:  b   6 60  8
    # 5:  a     NA  9
    # 6:  a     NA 10