R语言逻辑运算相关符号

简介: R语言逻辑运算相关符号


 1.<,>,<=,>=,==,!=:比较运算符

x = 5
y = 3
print(x < y)  # 输出 False,因为 5 不小于 3
print(x > y)  # 输出 True,因为 5 大于 3
print(x <= y) # 输出 False,因为 5 不小于或等于 3
print(x >= y) # 输出 True,因为 5 大于或等于 3
print(x == y) # 输出 False,因为 5 不等于 3
print(x != y) # 输出 True,因为 5 不等于 3

2.!,&,&&,|,||,xor():逻辑运算符

x <- TRUE
y <- FALSE
result_x <- !x
result_y <- !y
print(result_x)  # 输出 FALSE,因为对 TRUE 进行取反得到 FALSE
print(result_y)  # 输出 TRUE,因为对 FALSE 进行取反得到 TRUE

&&和&


短路行为:&& 是短路逻辑与(short-circuit AND)运算符,而 & 是非短路逻辑与(non-short-circuit AND)运算符。

&& 是短路逻辑与运算符。当第一个条件为 FALSE 时,&& 将立即返回 FALSE 而不会计算第二个条件。

& 是非短路逻辑与运算符。它对两个条件都进行求值,不管第一个条件的结果是什么。

向量操作:&& 在逻辑向量上只取第一个元素进行逻辑判断,而 & 则逐元素进行逻辑与操作。

&& 运算符只考虑逻辑向量的首个元素,如果首个元素为 FALSE,则结果为 FALSE,不会计算后续元素。

& 运算符用于逐元素逻辑与操作,在逻辑向量中的每对对应元素上执行逻辑与操作,并返回一个新的逻辑向量。

# 使用短路逻辑与运算符 &&
x <- FALSE && TRUE
y <- TRUE && FALSE
print(x)  # 输出 FALSE,因为第一个条件为 FALSE,不再计算后续的条件
print(y)  # 输出 FALSE,因为第一个条件为 TRUE,但第二个条件为 FALSE
# 使用非短路逻辑与运算符 &
v <- c(TRUE, FALSE, TRUE)
result <- v & v
print(result)  # 输出 TRUE FALSE TRUE,对应位置上的逻辑与结果

短路行为:|| 是短路逻辑或(short-circuit OR)运算符,而 | 是非短路逻辑或(non-short-circuit OR)运算符。

|| 是短路逻辑或运算符。当第一个条件为 TRUE 时,|| 将立即返回 TRUE 而不会计算第二个条件。

| 是非短路逻辑或运算符。它对两个条件都进行求值,不管第一个条件的结果是什么。

向量操作:|| 在逻辑向量上只取第一个元素进行逻辑判断,而 | 则逐元素进行逻辑或操作。

|| 运算符只考虑逻辑向量的首个元素,如果首个元素为 TRUE,则结果为 TRUE,不会计算后续元素。

| 运算符用于逐元素逻辑或操作,在逻辑向量的每对对应元素上执行逻辑或操作,并返回一个新的逻辑向量。

# 使用短路逻辑或运算符 ||
x <- TRUE || FALSE
y <- FALSE || TRUE
print(x)  # 输出 TRUE,因为第一个条件为 TRUE,不再计算后续的条件
print(y)  # 输出 TRUE,因为第一个条件为 FALSE,但第二个条件为 TRUE
# 使用非短路逻辑或运算符 |
v <- c(TRUE, FALSE, TRUE)
result <- v | v
print(result)  # 输出 TRUE TRUE TRUE,对应位置上的逻辑或结果
xor:用于执行逻辑异或(XOR)操作


异或操作符指示只有一个条件为 TRUE 时,结果为 TRUE;如果两个条件都为 TRUE 或都为 FALSE,则结果为 FALSE。


# 使用 xor() 函数进行逻辑异或操作
x <- TRUE
y <- FALSE
result1 <- xor(x, y)
result2 <- xor(TRUE, TRUE)
print(result1)  # 输出 TRUE,因为 x 和 y 只有一个为 TRUE
print(result2)  # 输出 FALSE,因为两个条件都为 TRUE
v1 <- c(TRUE, FALSE, TRUE)
v2 <- c(FALSE, FALSE, TRUE)
result3 <- xor(v1, v2)
print(result3)  # 输出 TRUE FALSE FALSE,对应位置的异或结果


3.all和any

#如果逻辑向量中的所有元素都为 TRUE,则返回 TRUE;否则返回 FALSE。
v <- c(TRUE, TRUE, TRUE)
result1 <- all(v)
print(result1)  # 输出 TRUE,因为所有元素都为 TRUE
v2 <- c(TRUE, FALSE, TRUE)
result2 <- all(v2)
print(result2)  # 输出 FALSE,因为有一个元素为 FALSE
#如果逻辑向量中存在至少一个为 TRUE 的元素,则返回 TRUE;否则返回 FALSE。
v3 <- c(FALSE, FALSE, TRUE)
result3 <- any(v3)
print(result3)  # 输出 TRUE,因为存在一个元素为 TRUE
v4 <- c(FALSE, FALSE, FALSE)
result4 <- any(v4)
print(result4)  # 输出 FALSE,因为所有元素都为 FALSE


4.ifelse和if...else

#当条件为 TRUE 时,返回为 TRUE 时的结果
#当条件为 FALSE 时,返回为 FALSE 时的结果
v <- c(1, 2, 3, 4, 5)
result <- ifelse(v > 3, "大于3", "不大于3")
print(result)
#输出
[1] "不大于3" "不大于3" "不大于3" "大于3"   "大于3"
x <- 5
if (x > 0) {
  print("x 是正数")
} else {
  print("x 不是正数")
}
#输出 [1] "x 是正数"


5. match

#查找某个元素在向量中的位置
v <- c("apple", "banana", "orange", "pear")
index <- match("orange", v)
print(index)  # 输出 3,因为 "orange" 在 v 中的第三个位置
index2 <- match("grape", v)
print(index2)  # 输出 NA,因为 "grape" 不存在于 v 中

6.%in%

element %in% vector,其中 element 是要检查的元素,vector 是目标向量或列表。
v <- c("apple", "banana", "orange", "pear")
result1 <- "orange" %in% v
print(result1)  # 输出 TRUE,因为 "orange" 存在于 v 中
result2 <- "grape" %in% v
print(result2)  # 输出 FALSE,因为 "grape" 不存在于 v 中
elements <- c("apple", "kiwi", "mango")
result3 <- elements %in% v
print(result3)  # 输出 TRUE FALSE FALSE,表示每个元素在 v 中的匹配结果

7.unique

#返回向量中的唯一元素,去除重复的值
v <- c(1, 2, 3, 2, 4, 3, 5)
unique_v <- unique(v)
print(unique_v)  # 输出 1 2 3 4 5,只包含了 v 中的唯一值

8.which与seq(along = x)

#which() 函数用于找出满足给定条件的元素在向量中的索引位置
v <- c(2, 4, 6, 8, 10)
indices <- which(v > 5)
print(indices)  # 输出 3 4 5,表示满足条件 v > 5 的元素在 v 中的索引位置
#这里seq(along=x)会生成由x的下标组成的向量
x <- c(3, 4, 3, 5, 7, 5, 9)
which(x > 5)
## [1] 5 7
seq(along=x)[x > 5]
## [1] 5 7
#用which.min()、which.max求最小值的下标和最大值的下标, 不唯一时只取第一个
which.min(x)
## [1] 1
which.max(x)
## [1] 7


9.duplicated

#duplicated() 函数用于检测向量或数据框中的重复元素
#并返回一个逻辑向量表示是否为重复元素
v <- c(1, 2, 3, 2, 4, 3, 5)
duplicated_v <- duplicated(v)
print(duplicated_v)  # 输出 FALSE FALSE FALSE TRUE FALSE TRUE FALSE
#第四个、第六个和第七个位置的元素是重复的,而其他位置的元素是首次出现的

10.switch

day <- "Wednesday"
weekend <- switch(day,
                  "Monday" = FALSE,
                  "Tuesday" = FALSE,
                  "Wednesday" = FALSE,
                  "Thursday" = FALSE,
                  "Friday" = FALSE,
                  "Saturday" = TRUE,
                  "Sunday" = TRUE,
                  "Unknown")
print(weekend)  # 输出 FALSE,因为 day 的值为 "Wednesday",被匹配到了工作日中

11.for

for (i in 1:5) {
  square <- i^2
  print(square)
}
#输出
[1] 1
[1] 4
[1] 9
[1] 16
[1] 25

12.while

i <- 1
while (i <= 5) {
  square <- i^2
  print(square)
  i <- i + 1
}
#输出
[1] 1
[1] 4
[1] 9
[1] 16
[1] 25

13.repeat,break

i <- 1
repeat {
  square <- i^2
  print(square)
 
  if (square > 100) {
    break  # 当平方值大于 100 时跳出循环
  }
 
  i <- i + 1
}
#输出
[1] 1
[1] 4
[1] 9
[1] 16
[1] 25
[1] 36
[1] 49
[1] 64
[1] 81
[1] 100


14.next

i <- 1
while (i <= 5) {
  if (i == 3) {
    i <- i + 1
    next  # 跳过当前迭代,进入下一次迭代
  }
  if (i == 5) {
    break  # 在满足条件时跳出循环
  }
  print(i)
  i <- i + 1
}
print("循环结束")



15.apply和lapply

apply(X, MARGIN, FUN)

X 是要应用函数的数组;


MARGIN 指定要应用函数的维度,1 表示按行应用,2 表示按列应用;


FUN 是要应用的函数。


matrix <- matrix(c(1, 2, 3, 4, 5, 6), nrow = 2)
col_sums <- apply(matrix, 2, sum)
print(col_sums)  # 输出每列的总和

lapply(X, FUN)

X 是要应用函数的列表;


FUN 是要应用的函数。


my_list <- list("apple", "banana", "orange")
lengths <- lapply(my_list, length)
print(lengths)  # 输出每个元素的长度


16.sapply,tapply和sweep

(1)sapply()


sapply(X, FUN)

X 是要应用函数的列表或向量;FUN 是要应用的函数。


#计算向量中每个元素的平方根
numbers <- c(4, 9, 16, 25)
sqrt_values <- sapply(numbers, sqrt)
print(sqrt_values)  # 输出每个元素的平方根
#输出结果为 [2, 3, 4, 5],表示每个元素的平方根。

(2)tapply


tapply(X, INDEX, FUN)

X 是要分组的数据;INDEX 是指定分组的因子或索引变量;FUN 是要应用的函数。


values <- c(10, 20, 30, 15, 25, 35)
groups <- factor(c("A", "B", "A", "B", "A", "B"))
mean_values <- tapply(values, groups, mean)
print(mean_values)  # 输出每个因子组的平均值
#输出结果为 A: 21.67, B: 23.33,表示每个因子组的平均值。

(3)sweep()


sweep(X, MARGIN, STATS, FUN)

X 是要进行操作的数组;


MARGIN 指定要操作的维度;


STATS 是用于操作的统计值;


FUN 指定要应用的操作函数。


matrix <- matrix(c(10, 20, 30, 40, 50, 60), nrow = 2)
subtracted_matrix <- sweep(matrix, 2, 5, "-")#每个向量减去5(-5)
print(subtracted_matrix)  # 输出每列减去对应的值后的矩阵


17.is.na()和is.finite()

#is.na()判断向量每个元素是否NA
is.na(c(1, NA, 3) > 2)
## [1] FALSE  TRUE FALSE
is.finite()判断向量每个元素是否Inf值
# 判断数值是否为正无穷大
y <- 10
is_infinite <- is.infinite(y)
print(is_infinite)  # 输出 FALSE

18.all.equal与identical()

#identical(x,y)比较两个R对象x与y的内容是否完全相同, 结果只会取标量TRUE与FALSE两种
identical(c(1,2,3), c(1,2,NA))
## [1] FALSE
identical(c(1L,2L,3L), c(1,2,3))
## [1] FALSE
#all.equal()与identical()类似, 但是在比较数值型时不区分整数型与实数型
#而且相同时返回标量TRUE, 但是不同时会返回一个说明有何不同的字符串
all.equal(c(1,2,3), c(1,2,NA))
## [1] "'is.NA' value mismatch: 1 in current 0 in target"
all.equal(c(1L,2L,3L), c(1,2,3))
## [1] TRUE
目录
相关文章
|
7月前
|
安全
R语言中的Wilcoxon符号秩检验与配对学生t检验
R语言中的Wilcoxon符号秩检验与配对学生t检验
R语言笔记丨从零学起?环境安装、基础知识、运算法则、数据类型(下)
R语言笔记丨从零学起?环境安装、基础知识、运算法则、数据类型(下)
|
数据挖掘 Linux Python
R语言中实现多维数据交并补集合运算,利用tidyverse系列包,intersect、union、setdiff
R语言中实现多维数据交并补集合运算,利用tidyverse系列包,intersect、union、setdiff
R语言中实现多维数据交并补集合运算,利用tidyverse系列包,intersect、union、setdiff
|
机器学习/深度学习 数据挖掘 Linux
R语言笔记丨从零学起?环境安装、基础知识、运算法则、数据类型(上)
R语言笔记丨从零学起?环境安装、基础知识、运算法则、数据类型
|
机器学习/深度学习 移动开发 数据挖掘
R语言- data.table包加速大型数据集的加载和运算效率用法示例
本文根据个人使用经验和博客参考,总结分享了在R语言中使用data.table包来提升大型数据集处理效率的用法示例,以供参考
269 0
初识R语言之常见符号篇
初识R语言之常见符号篇
501 0
初识R语言之常见符号篇
|
索引
《R语言编程艺术》——2.4 常用的向量运算
本节书摘来自华章计算机《R语言编程艺术》一书中的第2章,第2.4节,作者:(美)麦特洛夫(Matloff,N.)著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1457 0
|
自然语言处理 Java 大数据
提升R语言运算效率的11个实用方法
众所周知,当我们利用R语言处理大型数据集时,for循环语句的运算效率非常低。有许多种方法可以提升你的代码运算效率,但或许你更想了解运算效率能得到多大的提升。
1352 0
|
3月前
|
数据采集 机器学习/深度学习 数据可视化
R语言从数据到决策:R语言在商业分析中的实践
【9月更文挑战第1天】R语言在商业分析中的应用广泛而深入,从数据收集、预处理、分析到预测模型构建和决策支持,R语言都提供了强大的工具和功能。通过学习和掌握R语言在商业分析中的实践应用,我们可以更好地利用数据驱动企业决策,提升企业的竞争力和盈利能力。未来,随着大数据和人工智能技术的不断发展,R语言在商业分析领域的应用将更加广泛和深入,为企业带来更多的机遇和挑战。
|
2月前
|
数据挖掘 C语言 C++
R语言是一种强大的统计分析工具,提供了丰富的函数和包用于时间序列分析。
【10月更文挑战第21天】时间序列分析是一种重要的数据分析方法,广泛应用于经济学、金融学、气象学、生态学等领域。R语言是一种强大的统计分析工具,提供了丰富的函数和包用于时间序列分析。本文将介绍使用R语言进行时间序列分析的基本概念、方法和实例,帮助读者掌握R语言在时间序列分析中的应用。
49 3