r %in% 数据 table 因素的操作员行为?

r %in% operator behavior for data table factors?

我似乎无法让 %in% 运算符对数据 table 因子列起作用。我知道我可能遗漏了一些数据 tables 的秘密语法,但我找不到它...我已经搜索过了。

这里有一个小例子可以说明我的痛苦。当然,简单的答案是使用数据框,但我有一个大型数据集,它受益于数据 tables.

的某些特征
> a <- data.table(c1=factor(c(1,2,3)))
> a
   c1
1:  1
2:  2
3:  3

> '2' %in% a[,1,with=F]
[1] FALSE

> 2 %in% a[,1,with=F]
[1] FALSE

它的工作方式和我对数据帧的预期一样...

> b <- data.frame(c1=factor(c(1,2,3)))
> '2' %in% b[,1]
[1] TRUE

感谢任何帮助....

a[,1,with=F] 是 data.table 而不是像 b[,1] 这样的向量。这是记录在案的。

A data.table 是一个列表,help("%in%") 表示 "lists are converted to character vectors"。所以,我猜会发生这种情况(但它隐藏在 match 的 C 源代码中):

as.character(a[,1,with=F])
#[1] "1:3"

您可以 select data.table 列有效地使用 [[:

'2' %in% a[[1]]
#[1] TRUE