R gotcha: lógico-y el operador para combinar condiciones es & no &&

¿Por qué el subset() funciona con un operador lógico y && combinando dos condiciones?

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

pero cada uno trabaja individualmente:

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

(¿Desea evitar el uso de grandes variables temporales? Mi conjunto de datos es enorme)

Desde la página de ayuda para Logical Operators , accesible por ?"&&" :

& y && indican lógico AND y | y || indicar OR lógico La forma más corta realiza comparaciones de elementos de la misma manera que los operadores aritméticos. La forma más larga se evalúa de izquierda a derecha examinando solo el primer elemento de cada vector. La evaluación continúa solo hasta que se determine el resultado. La forma más larga es apropiada para progtwigr el flujo de control y, por lo general, es preferible en las cláusulas if.

(R versión 2.13-0)

En otras palabras, al usar un subset , use el único & .


Aquí hay una ilustración de la diferencia:

 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 

Si esto parece peculiar en comparación con otros paradigmas de progtwigción, recuerde que R necesita proporcionar una forma vectorizada del operador.

En R, realmente desea el operador & lugar de && para hacer una operación AND por pares, el && realiza un AND a nivel de bit. La misma regla se aplica para O: si desea hacer un O lógico en lugar de uno OR, usted quiere el | operador.

Intereting Posts