当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R Logic 逻辑运算符


R语言 Logic 位于 base 包(package)。

说明

这些运算符作用于原始向量、逻辑向量和number-like向量。

用法

! x
x & y
x && y
x | y
x || y
xor(x, y)

isTRUE (x)
isFALSE(x)

参数

x , y

rawlogical 或 ‘number-like’ 向量(即类型 double (类 numeric )、integercomplex ),或已为其编写方法的对象。

细节

!表示逻辑非(NOT)。

&&&表示逻辑AND,|||表示逻辑OR。较短的形式以与算术运算符大致相同的方式执行元素比较。较长的形式从左到右计算,直到确定结果为止。较长的形式适用于编程 control-flow,并且通常在 if 子句中首选。

&&|| 中使用包含多个元素的向量将产生错误。

xor 表示元素异或。

isTRUE(x)是相同的{ is.logical(x) && length(x) == 1 && !is.na(x) && x };isFALSE()类似地定义。最后,if(isTRUE(cond))可能优于if(cond)因为NAs.
在早些时候R版本,isTRUE <- function(x) identical(x, TRUE),有一个错误的缺点,例如,对于x <- c(val = TRUE).

数字和复数向量将被强制为逻辑值,零为假,所有非零值为真。对于 !&|xor ,原始向量的处理无需任何强制,这些运算符按位应用(因此 ! 是 1 补码)。

运算符 !&| 是通用函数:可以单独为它们编写方法,也可以通过 Ops (或 S4 Logic ,见下文)组通用函数编写方法。 (有关如何计算调度的信息,请参阅Ops。)

NA 是有效的逻辑对象。当 xy 的组件是 NA 时,如果结果不明确,则结果将为 NA。换句话说, NA & TRUE 的计算结果为 NA ,但 NA & FALSE 的计算结果为 FALSE 。请参阅下面的示例。

有关这些运算符的优先级,请参阅Syntax:与许多其他语言(包括 S)不同,AND 和 OR 运算符不具有相同的优先级(AND 运算符的优先级高于 OR 运算符)。

对于 ! ,与 x 长度相同的逻辑或原始向量(对于原始 x ):名称、维度和维度名称从 x 复制,以及所有其他属性(包括类)(如果没有强制转换)完毕。

对于 |&xor 为逻辑向量或原始向量。如果涉及零长度向量,则结果的长度为零。否则,较短向量的元素将根据需要进行回收(当它们仅部分回收时,使用 warning)。确定结果属性的规则相当复杂。大多数属性都取自较长的参数,如果它们的长度相同,则取自第一个参数。如果名称与答案的长度相同,则将从第一个名称复制,否则从第二个名称复制。对于时间序列,仅当系列兼容且使用时间序列的类和 tsp 属性(如果两者都相同时,则相同)时,才允许执行这些操作。对于数组(和数组结果),如果它是数组,则从第一个参数获取维度和暗名称,否则从第二个参数获取。

对于 ||&&isTRUE ,长度为 1 的逻辑向量。

S4方法

!&| 是 S4 泛型,Logic 组泛型的后两部分(因此方法需要参数名称 e1, e2 )。

注意

元素运算符有时被称为函数,例如`&`(x, y) :请参阅Ops 中如何完成argument-matching 的说明。

例子

y <- 1 + (x <- stats::rpois(50, lambda = 1.5) / 4 - 1)
x[(x > 0) & (x < 1)]    # all x values between 0 and 1
if (any(x == 0) || any(y == 0)) "zero encountered"

## construct truth tables :

x <- c(NA, FALSE, TRUE)
names(x) <- as.character(x)
outer(x, x, `&`) ## AND table
outer(x, x, `|`) ## OR  table

参考

Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988) The New S Language. Wadsworth & Brooks/Cole.

也可以看看

TRUElogical

anyall 用于对许多标量参数进行 OR 和 AND 运算。

Syntax 用于运算符优先级。

bitwAnd 用于整数向量的按位版本。

相关用法


注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Logical Operators。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。