这篇文章涉及使用包数据的子集化数据。基于包括逻辑AND运算符的复合条件,特别是用&获得的结果的差异。 vs&&。
环境:R版本3.2.1(2015-06-18),x86_64-w64-mingw32 / x64(64位),Windows 10 Pro,data.table 1.9.4。
我正在对回归调用中使用的data.table进行子集化;模型的细节在下面被抑制,但调用的数据子句被完整复制。
lm( y ~ u + v + w, data=DT[condo != 1 &<&> apt != 1] )
包含第二个&
(在尖括号中)提供了表达式的替代形式。
Data.table DT约有。 25,000行。变量condo
和apt
是{0,1}
中的值永远无效的虚拟变量。事实证明,在我正在处理的实例中,变量apt
总是0
。
使用单个&
根据需要选择DT行,不包括condo == 1
行。但是,当使用两个&符号&&
时,不会排除任何行,并且会针对所有DT运行回归。
所以我的问题:为什么会发生这种情况? package data.table如何处理针对DT行的i条件? &&
对condo[1]
和apt[1]
的尊重行为是否解释了观察到的行为? (在data.table的第一行,condo = 0
和apt = 0
。)
还有一个额外的问题:在condo != 1
这样的条件应该在什么条件下写成condo != 1L
,如果R存储(未声明的)整数是双倍的?这不仅仅是一个空闲的问题;基于虚拟对象的数据子集在我的工作中经常出现。