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

时间:2011-08-03 21:34:51

标签: r subset logical-operators

为什么subset()不能使用合并两个条件的逻辑和&&运算符?

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

但他们每个人都单独工作:

> subset(tt, customer_id==177)

> subset(tt, visit_date=="2010-08-26")

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

2 个答案:

答案 0 :(得分:26)

来自Logical Operators的帮助页面,可由?"&&"访问:

&安培;和&amp;&amp;表示逻辑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

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

答案 1 :(得分:8)

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