为什么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")
(想避免使用大型临时变量 - 我的数据集很大)
答案 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,则需要|
运算符。