R语言逻辑运算相关符号

目录

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

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

3.all和any

4.ifelse和if...else

5. match

6.%in%

7.unique

8.which

9.duplicated

10.switch

11.for

12.while

13.repeat,break

14.next

15.apply和lapply

16.sapply,tapply和sweep

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

18.all.equal与identical()


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

&&和&

  1. 短路行为&& 是短路逻辑与(short-circuit AND)运算符,而 & 是非短路逻辑与(non-short-circuit AND)运算符。
  • && 是短路逻辑与运算符。当第一个条件为 FALSE 时,&& 将立即返回 FALSE 而不会计算第二个条件。
  • & 是非短路逻辑与运算符。它对两个条件都进行求值,不管第一个条件的结果是什么。
  1. 向量操作&& 在逻辑向量上只取第一个元素进行逻辑判断,而 & 则逐元素进行逻辑与操作。
  • && 运算符只考虑逻辑向量的首个元素,如果首个元素为 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,对应位置上的逻辑与结果
  1. 短路行为|| 是短路逻辑或(short-circuit OR)运算符,而 | 是非短路逻辑或(non-short-circuit OR)运算符。
  • || 是短路逻辑或运算符。当第一个条件为 TRUE 时,|| 将立即返回 TRUE 而不会计算第二个条件。
  • | 是非短路逻辑或运算符。它对两个条件都进行求值,不管第一个条件的结果是什么。
  1. 向量操作|| 在逻辑向量上只取第一个元素进行逻辑判断,而 | 则逐元素进行逻辑或操作。
  • || 运算符只考虑逻辑向量的首个元素,如果首个元素为 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("循环结束")

R语言逻辑运算相关符号_第1张图片

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)  # 输出每个元素的长度

R语言逻辑运算相关符号_第2张图片

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)  # 输出每列减去对应的值后的矩阵

R语言逻辑运算相关符号_第3张图片

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

整理不易,如有错误或遗漏,请大佬们不吝赐教!!

你可能感兴趣的:(笔记,r语言,算法)