目录
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()
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
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,对应位置的异或结果
#如果逻辑向量中的所有元素都为 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
#当条件为 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 是正数"
#查找某个元素在向量中的位置
v <- c("apple", "banana", "orange", "pear")
index <- match("orange", v)
print(index) # 输出 3,因为 "orange" 在 v 中的第三个位置
index2 <- match("grape", v)
print(index2) # 输出 NA,因为 "grape" 不存在于 v 中
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 中的匹配结果
#返回向量中的唯一元素,去除重复的值
v <- c(1, 2, 3, 2, 4, 3, 5)
unique_v <- unique(v)
print(unique_v) # 输出 1 2 3 4 5,只包含了 v 中的唯一值
#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
#duplicated() 函数用于检测向量或数据框中的重复元素
#并返回一个逻辑向量表示是否为重复元素
v <- c(1, 2, 3, 2, 4, 3, 5)
duplicated_v <- duplicated(v)
print(duplicated_v) # 输出 FALSE FALSE FALSE TRUE FALSE TRUE FALSE
#第四个、第六个和第七个位置的元素是重复的,而其他位置的元素是首次出现的
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",被匹配到了工作日中
for (i in 1:5) {
square <- i^2
print(square)
}
#输出
[1] 1
[1] 4
[1] 9
[1] 16
[1] 25
i <- 1
while (i <= 5) {
square <- i^2
print(square)
i <- i + 1
}
#输出
[1] 1
[1] 4
[1] 9
[1] 16
[1] 25
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
i <- 1
while (i <= 5) {
if (i == 3) {
i <- i + 1
next # 跳过当前迭代,进入下一次迭代
}
if (i == 5) {
break # 在满足条件时跳出循环
}
print(i)
i <- i + 1
}
print("循环结束")
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) # 输出每个元素的长度
(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) # 输出每列减去对应的值后的矩阵
#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
#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
整理不易,如有错误或遗漏,请大佬们不吝赐教!!