Data.table中的交叉联接似乎没有保留列名

时间:2019-03-23 12:45:40

标签: r data.table cross-join

data.table文档对此进行了说明,请参见?CJ

  

x = c(1,1,2)

     

y = c(4,6,4)

     

CJ(x,y)#输出列自动命名为'x'和'y'

但是,当我运行示例时,它似乎并没有保留

x = c(1,1,2)
y = c(4,6,4)
CJ(x, y)
   V1 V2
1:  1  4
2:  1  4
3:  1  4
4:  1  4
5:  1  6
6:  1  6
7:  2  4
8:  2  4
9:  2  6

1 个答案:

答案 0 :(得分:2)

在帮助文件?CJ的主体中,即“详细信息”或“值”部分中未提及保留名称的情况。但是,似乎要提及的是,帮助文件的示例部分中保留了名称作为注释(看起来就像您在其中找到示例一样)。

CJ函数(似乎完全在R中实现)中进行挖掘,在末尾有一个块,

if (getOption("datatable.CJ.names", FALSE))
    vnames = name_dots(...)$vnames

运行getOption("datatable.CJ.names", FALSE)会在data.table版本1.12.0中返回FALSE。当我们使用

将其设置为TRUE时
options("datatable.CJ.names"=TRUE)

然后输入代码

x = c(1,1,2)
y = c(4,6,4)

CJ(x, y)

返回

   x y
1: 1 4
2: 1 4
3: 1 4
4: 1 4
5: 1 6
6: 1 6
7: 2 4
8: 2 4
9: 2 6

但是,您也可以直接提供名称(帮助文件中未提及)。

CJ(uu=x, vv=y)

返回

   uu vv
1:  1  4
2:  1  4
3:  1  4
4:  1  4
5:  1  6
6:  1  6
7:  2  4
8:  2  4
9:  2  6

请注意,这将覆盖上面的选项。