R gotcha:用于组合条件的逻辑和运算符是&not &&

smc*_*mci 21 r subset logical-operators

为什么不subset()兼容&&两个条件的逻辑和运算符?

> subset(tt, (customer_id==177 && visit_date=="2010-08-26"))
<0 rows> (or 0-length row.names)
Run Code Online (Sandbox Code Playgroud)

但它们各自独立工作:

> subset(tt, customer_id==177)

> subset(tt, visit_date=="2010-08-26")
Run Code Online (Sandbox Code Playgroud)

(想避免使用大型临时变量 - 我的数据集很大)

And*_*rie 26

从帮助页面Logical Operators可访问?"&&":

&和&&表示逻辑AND和| 和|| 表示逻辑OR.较短的形式以与算术运算符大致相同的方式执行元素比较.较长的形式从左到右评估仅检查每个向量的第一个元素.评估仅在确定结果之前进行.较长的形式适用于编程控制流程,通常在if子句中是优选的.

(R版本2.13-0)

换句话说,使用时subset,请使用单曲&.


以下是差异的说明:

c(1,1,0,0) & c(1,0,1,0)
[1]  TRUE FALSE FALSE FALSE

c(1,1,0,0) && c(1,0,1,0)
[1] TRUE
Run Code Online (Sandbox Code Playgroud)

如果与其他编程范例相比看起来古怪,请记住R需要提供运算符的矢量化形式.


Jam*_*son 8

在R中,你实际上想要&运算符而不是&&成对的AND运算,&&它是按位AND.相同的规则适用于OR:如果要执行逻辑OR而不是按位OR,则需要|运算符.

  • @Andrie:请记住,在C/C++,Python,PHP和大多数其他语言中,'&'是按位和运算符,'&&'是逻辑和.R文档不应该假装我们生活在真空中.任何R决定像这样古怪的情况都应该在文档中非常清楚地说出来.我每周都在R和Python之间徘徊. (2认同)