数字列上的R data.table设置键

数字列上的R data.table设置键,r,data.table,R,Data.table,我们真的需要添加J()来选择数字列吗 我们可以在不使用J()的情况下获得字符列的结果 谢谢 之所以DT[1]与DT[J(1)]不同,是因为我们可能需要两种不同的解释: 第一行,DT[1] 键等于1,DT[J(1)] 只有当第一个参数是数字时,才存在潜在的歧义,这就是为什么这两种情况有两种不同的符号 在字符键的情况下,不会出现这种潜在的歧义,因为字符参数只能表示第二种情况 另外,DT[“1”]是问题代码中的一个错误,因为示例中的键不是字符和数据。表在这里不执行类型强制。之所以DT[1]与DT[J(

我们真的需要添加
J()
来选择数字列吗

我们可以在不使用
J()
的情况下获得字符列的结果


谢谢

之所以
DT[1]
DT[J(1)]
不同,是因为我们可能需要两种不同的解释:

  • 第一行,
    DT[1]
  • 键等于
    1
    DT[J(1)]
  • 只有当第一个参数是数字时,才存在潜在的歧义,这就是为什么这两种情况有两种不同的符号

    在字符键的情况下,不会出现这种潜在的歧义,因为字符参数只能表示第二种情况


    另外,
    DT[“1”]
    是问题代码中的一个错误,因为示例中的键不是字符和数据。表在这里不执行类型强制。

    之所以
    DT[1]
    DT[J(1)]
    不同,是因为我们可能需要两种不同的解释:

  • 第一行,
    DT[1]
  • 键等于
    1
    DT[J(1)]
  • 只有当第一个参数是数字时,才存在潜在的歧义,这就是为什么这两种情况有两种不同的符号

    在字符键的情况下,不会出现这种潜在的歧义,因为字符参数只能表示第二种情况


    另外,
    DT[“1”]
    是问题代码中的一个错误,因为示例中的键不是字符和数据。表不会在此处执行类型强制。

    @G.Grothendieck-为什么不将此作为答案发布?确定。您也可以使用
    (1)
    而不是
    J(1)
    @G.Grothendieck-为什么不将此作为答案发布?好的。您也可以使用
    (1)
    而不是
    J(1)
    library(data.table)
    DT = data.table(x=rep(c("a","b","c"),each=3), y=c(1,3,6), v=1:9)
    setkey(DT,x)  
    DT["a"]  
    #    x y v
    # 1: a 1 1
    # 2: a 3 2
    # 3: a 6 3
    
    setkey(DT,y)  
    DT["1"]  
    # Error in `[.data.table`(DT, "1") : 
    #  typeof x.y (double) != typeof i.y (character)
    
    # Is it a bug?
    
    DT[J(1)]
    #    y x v
    # 1: 1 a 1
    # 2: 1 b 4
    # 3: 1 c 7