R data.table警告-项目大小相同,但最大大小相同(回收后留下剩余项目)

R data.table警告-项目大小相同,但最大大小相同(回收后留下剩余项目),r,data.table,R,Data.table,我使用data.table J对5列进行th1子集分析:split1,market,dept\u size,bool\u 3,cust\u poor\u rich 我知道我应该使用unique(column\u name)来指定该列应包含任何值 尽管我使用此命令遇到以下警告: setkey(th1, split1, market, dept_size, bool_3, cust_poor_rich) subs = th1[J(0, unique(market), unique(dept_siz

我使用data.table J对5列进行
th1
子集分析:
split1,market,dept\u size,bool\u 3,cust\u poor\u rich

我知道我应该使用
unique(column\u name)
来指定该列应包含任何值

尽管我使用此命令遇到以下警告:

setkey(th1, split1, market, dept_size, bool_3, cust_poor_rich)

subs = th1[J(0, unique(market), unique(dept_size), 1, factor(1)), nomatch=0]
 Warning message:
 In as.data.table.list(i) :
  Item 3 is of size 5 but maximum size is 34 (recycled leaving a remainder of 4 items)
我试图用一个小例子再现这个错误,但无法再现

我假设
Item 3
引用了J()中的第三个输入,我可以看到
length(unique(th1$dept_size))
是5

但是
34
从何而来?
为什么要留下剩下的4项呢?

您可以使用
CJ
获得所有唯一的组合,而不是所有唯一的值

th1[CJ(0, unique(market), unique(dept_size), 1, factor(1)), nomatch=0]

您可以使用
CJ
获取所有唯一的组合,而不是所有唯一的值

th1[CJ(0, unique(market), unique(dept_size), 1, factor(1)), nomatch=0]

我打赌
长度(唯一(市场))
是34(并且
34%%5==4
)。为什么不直接使用
setkey
而不使用market和dept_size,这样就可以轻松地进行连接。@shadow是的,长度(unique(market))是34。我不想在没有市场的情况下设置密钥,因为我处于循环中,有时我确实需要使用市场价值进行二进制搜索。部门大小也一样。我打赌
长度(唯一(市场))
是34(并且
34%%5==4
)。为什么不直接使用
setkey
而不使用market和dept_size,这样就可以轻松地进行连接。@shadow是的,长度(unique(market))是34。我不想在没有市场的情况下设置密钥,因为我处于循环中,有时我确实需要使用市场价值进行二进制搜索。相同的dept_size.将返回数据中不存在的组合;虽然我想计算实际的数据组合。但您使用
nomatch=0
,因此它不会返回数据中不存在的组合。注意:
CJ
是一种更快的
数据。table
替代
expand.grid
,它将返回数据中不存在的组合;虽然我想计算实际的数据组合。但您使用的是
nomatch=0
,因此它不会返回数据中不存在的组合。注意:
CJ
是比
data.table
更快的
expand.grid