Class 05 - 逻辑运算符and,or,not 和 条件语句 if

逻辑运算符和条件语句

逻辑运算符
R语言中的逻辑运算符可以帮助我们对两个操作数据执行逻辑运算,逻辑运算符可以帮助我们实现复杂的逻辑操作。

  • 逻辑与(and)运算符(&)表示只有两个操作数都为真时,整个表达式的值才为真;
  • 逻辑或(or)运算符(|)表示只要有一个操作数为真时,整个表达式的值就为真;
  • 逻辑非(not)运算符()将操作数的值取反。

了解逻辑运算符对于编写正确的程序至关重要,因为它们是编程中许多问题的关键所在。

条件语句
条件语句是一种用于控制程序流程的语句,它可以根据某个条件来执行特定的操作,或者在满足特定条件的情况下重复执行某些操作。条件语句通常由以下三个部分组成:

  • 条件表达式:用于评估条件是否为真。如果条件为真,则整个条件语句的代码块将被执行。
  • 如果条件:用于指定在条件为真时应执行的代码块。如果条件为假,则跳过该代码块。
  • 换行符:用于分隔条件语句的不同部分。

使用条件语句可以帮助程序员根据条件来决定执行哪些代码块,从而实现更加灵活和动态的程序设计。条件语句可以用于各种编程任务,例如函数调用、循环、选择等。

逻辑运算符 and , or , not

逻辑运算符返回的值为逻辑数据类型, TRUE(真) 或 FALSE(假)。

在编程语言中,逻辑运算符的功能基本上都一样,最起码在Python中的逻辑运算符和R语言的用法和功能是一样的。

逻辑运算符主要有三种类型:

  • AND(有时在 R 中表示为 & &&) 表示只有两个操作数都为真时,整个表达式的值才为真

  • OR (有时在 R 中表示为 | ||)表示只要有一个操作数为真时,整个表达式的值就为真

  • NOT (!) 将操作数的值取反

下面我们逐个来了解逻辑运算符

and 运算符“&”

AND 运算符采用两个逻辑值。仅当两个单独的值均为 TRUE 时,它才返回 TRUE。这意味着 TRUE & TRUE 的计算结果为 TRUE。然而,FALSE & TRUETRUE & FALSEFALSE &FALSE 的评估结果都是 FALSE

如果我们在 R 中运行相应的代码,则会得到以下结果:

> TRUE & TRUE
[1] TRUE
> TRUE & FALSE
[1] FALSE
> FALSE & TRUE
[1] FALSE
> FALSE & FALSE
[1] FALSE

在这里插入图片描述

举个例子:
如果我们要检查一个变量值是否比5大比10小。这时后我们就可以使用and来检查。
我们先设置一个变量x值为6

x <- 6

然后我们再设置检查x是否大于5但小于10,可以使用x>5x<10,作为and语句表达式的值。

x > 5 & x < 10

运行函数时,R 返回结果 TRUE。如下图

在这里插入图片描述

运行步骤:

  • 第一步, x > 5 的计算结果为 TRUE,因为 6 大于 5
  • 第二步,x < 10 也将计算为 TRUE,因为 6 小于 10
  • 因此,由于两个值均为 TRUE,因此 and语句返回的结果为 TRUE。数字 6位于数字 510 之间。

下面我们变更一下x的值,让x的值只满足其中一个表达式为真,这时and语言返回的结果就为FALSE。使x等于16,则表达式x>5x<10将返的结果为FALSE

# 逻辑运算符 and
# 设置一个变量x=6
x <- 16
# 设置逻辑运算语句检查x
x>5 & x<10

# 输出结果为
[1] FALSE

在这里插入图片描述

虽然 x > 5 为真(16 > 5),但 x < 10 为假(16 < 10)。
如果 AND 表达式的一部分为 FALSE,则整个表达式为 FALSE(TRUE & FALSE = FALSE)。
因此,R 返回结果 FALSE

OR 运算符 “|”

OR 运算符 (|) 的工作方式与 AND 运算符 (&) 类似。主要区别在于,OR 运算的结果只要一个值为 TRUE,则整个 OR 运算的计算结果就为 TRUE。这意味着 TRUE |TRUETRUE |FALSE,和 FALSE|TRUE 所有计算结果为 TRUE。当两个值都为 FALSE 时,结果为 FALSE

如果用代码演示,则会得到以下结果:

> TRUE | TRUE
[1] TRUE
> TRUE | FALSE
[1] TRUE
> FALSE | TRUE
[1] TRUE
> FALSE | FALSE
[1] FALSE

在这里插入图片描述

举个例子:
例如,假设您创建一个等于 9 的变量 y。要检查 y 是小于 10 还是大于 15,可以使用以下表达式:

# 逻辑运算符 or
y <- 9
# 检查y的值
y < 10 | y > 15

在这里插入图片描述

  • 比较结果为 TRUE(9 小于 10)| FALSE(9 不大于 15)。
  • 由于 OR 表达式只有一个值需要为 TRUE,整个表达式才为 TRUE
  • 因此 R 返回的结果为 TRUE

现在,假设y15。表达式 y < 9 | y > 19 现在计算结果为 FALSE (15 < 9) | FALSE (15 > 19)。两个比较都是 FALSE,所以结果是 FALSE

# 逻辑运算符 or
y <- 15
# 检查y的值
y < 9 | y > 19

# 输出结果
[1] FALSE

在这里插入图片描述

not 运算符“!

NOT 运算符 () 只是否定它所应用的逻辑值。换句话说,!TRUE 的计算结果为 FALSE,并且 !FALSE 的计算结果为 TRUE
换一种说法就是取表达式的反向值,也就是取反。

如果用代码演示,则会得到以下结果:

> !TRUE
 [1] FALSE
> !FALSE
[1] TRUE

在这里插入图片描述

就像 ORAND 运算符一样,你可以将 NOT 运算符与逻辑运算符结合使用。零被视为 FALSE,非零数字被视为 TRUENOT 运算符的计算结果为相反的逻辑值。

举个例子:
假设有一个变量x等于 2not 操作的计算结果为 FALSE,因为它采用与非零数 (TRUE) 相反的逻辑值。

# 逻辑运算符 not
x <- 2

!x

# 输出结果
[1] FALSE

在这里插入图片描述


案例运用 and , or , not

前面这些例子是为了让你了解逻辑运算符andornot 而用简单的数字来演示他们的用法。

但是如何再实际的数据处理中使用这些功能,有可能还没有很清楚,下面我们用一个实际的数据来演示逻辑运算符的用法。

我们使用预加载在 RStudio 中的空气质量数据集。它包含1973年5月至9月纽约每日空气质量测量数据。
数据框有六列:

  • Ozone 臭氧(臭氧测量值)
  • Solar.R(太阳测量值)
  • Wind 风(风力测量值)
  • Temp 温度(华氏度温度)
  • Month 月份和
  • Day 日期 (月份中的第几天)

我们直接在RStudio中输入airquality点击运行就能查看数据集中的数据了。

# 查看airquality数据
airquality

如下图
在这里插入图片描述

接下来让我们来看看 ANDORNOT 运算符如何来帮助我们处理数据。

subset() 筛选数据

在实际应用中,由于逻辑运算符所计算返回的结果为逻辑值,并不是我们最后需要的结果数据,我们需要把得到的逻辑值映射到数据中,从而实现对数据的筛选。
这时候我们需要用到subset()函数。

subset( 数据 , 表达式 )

AND 实例

假设我们要找出阳光明媚且风力极大的数据条,那么我们可以将其定义为太阳测量值超过 150,风力的测量值超过 10。

在代码中,你可以将逻辑语句表示为: Solar.R > 150 & Wind > 10。只有这两个条件都为真的行才满足条件

# 筛选太阳测量值超过 150,风力的测量值超过 10 的数据
# 把 airquality设置为df,为了让代码短一些。
df <- airquality
# 筛选数据
subset(df, df$Solar.R > 150 & df$Wind > 10)

在这里插入图片描述

在输出结果中我们可以看到Solar.RWind两列数据中的值已经被过滤了,结果中的数据都满足了我们设置的筛选条件。

OR 实例

接下来,假设我们要筛选Wind(风力)小于10或者Temp(温度)高于90的数据。

在代码中,你可以将逻辑语句表示为: Wind < 10 | Temp > 90。只要这两个条件有一个为真就能满足筛选条件。

# 筛选Wind(风力)小于10或者Temp(温度)高于90的数据。
# 把 airquality设置为df,为了让代码短一些。
df <- airquality
# 筛选数据
subset(df, df$Wind < 10 | df$Temp > 90)

在这里插入图片描述

在数据的筛选结果中我们能够看到,有满足Wind<10 不满足Temp > 90的,有不满足Wind<10 满足Temp > 90的,还有两个条件都满足的。

NOT 实例

现在,假设我们只需要不是每月第一天的天气测量值。在R语言中,可以将此逻辑语句表示为 Day != 1

# 筛选不是每月第一天的天气测量值。
# 把 airquality设置为df,为了让代码短一些。
df <- airquality
# 筛选数据
subset(df, df$Day!=1)

在这里插入图片描述

在结果中已经不包含Day=1的数据了。

混合使用实例

当你需要进行复杂的条件筛选的时候,单独的逻辑运算符是不能够满足需求的,这是可以混合使用逻辑运算符来实现复杂的筛选功能。

假设你想要找出5月份中,风力比较弱Wind < 8或温度较高Temp>80的数据

# 筛选5月份中风力  wind > 10 或 温度Temp > 90
# 把 airquality设置为df,为了让代码短一些。
df <- airquality
# 筛选数据
subset(df, df$Month==5 & (df$Wind < 8 | df$Temp > 80 ))

在这里插入图片描述

tips:

  • 在混合使用逻辑运算符的时候,需要注意代码执行的顺序和优先级,在多个条件混合使用的时候需要用()括号来控制条件的执行顺序。

如上面例子条件df$Month==5 & (df$Wind < 8 | df$Temp > 80 )中通过括号把前面的&和后面的 | 运算区别开执行,机器会先执行括号中的| 然后在执行 &,这样才能实现筛选出我们需要的数据。

如果不加括号df$Month==5 & df$Wind < 8 | df$Temp > 80 这样写条件的话,机器会按照从左到右的顺序先执行&然后执行|,所得出来的结果就是 5月份企且风力wind<8的数据或者温度 ``Temp>80`数据,结果中会包含5月之外的数据。结果如下:
在这里插入图片描述


条件语句 if

条件语句是一种声明,如果某个条件成立,则必须发生某个事件。例如,“如果温度高于冰点,那么我会出去散步。如果第一个条件为真(温度高于冰点),则会发生第二个条件(我会去散步)。R 代码中的条件语句具有类似的逻辑。

让我们讨论如何使用三个相关语句在 R 中创建条件语句:

+ if()

+ else()

+ else if()

if 语句

if 语句设置一个条件,如果条件的计算结果为 TRUE,则执行与 if 语句关联的 R 代码。

R 中,将条件的代码放在if语句的括号内。如果条件为 TRUE,则必须执行大括号的代码 (expr) 。
请注意,一般第一个个大括号放在其自己的代码行上,第二个大括号放在代码的末尾。

if (条件) {

expr

}

举个例子:
让我们创建一个条件语句:如果 x 大于 0,则 R 将打印出字符串“x 是正数”。


# if语句
x = 3
# if条件判断
if (x > 0) {
  
  print("这个数是正数")
  
}

在这里插入图片描述

由于 x = 3,因此条件为真 (3 > 0)。因此,当你运行代码时,R 会打印出字符串“这个数是正数”。

如果将x更改为负数,例如 -2,则条件将为 FALSE (-2 > 0)。
如果运行代码,R 将不会执行 print 语句。相反,结果将显示一个空行。


# if语句
x = -2
# if条件判断
if (x > 0) {
  
  print("这个数是正数")
  
}

在这里插入图片描述

else语句

else 语句需要与 if 语句结合使用。以下是R语言中代码的结构:

if (条件) {

expr1

} else {

expr2

}

只要 if 语句的条件不为 TRUE,就会执行与 else 语句关联的代码。换句话说,如果条件为 TRUE,则 R 将执行if语句 (expr1) 中的代码;如果条件不是 TRUE,则 R 将执行 else 语句 (expr2) 中的代码。

举个例子:

先创建一个等于 9 的变量 x。

x <- 9

然后,让我们设置以下条件:
如果 x 大于 0,R 将打印“这是一个正数”。
如果 x 小于或等于 0,R 将打印“这个数为0或者为负数”。

在我们的代码中,第一个条件 (x > 0) 将是 if 语句的一部分。x 小于或等于 0 的第二个条件隐含在 else 语句中。如果 x > 0,则 R 将打印“这是一个正数”。否则,R 将打印“这个数为0或者为负数”。


# if语句
x <- 9

# if else条件判断

if (x > 0) {
  
  print ("这是一个正数")
  
} else {
  
  print ("这个数为0或者为负数")
  
}

在这里插入图片描述

由于 9 大于 0,因此 if 语句的条件为真。因此,当您运行代码时,R 会执行if下的语句打印出“这是一个正数”。

但是,如果使 x 等于 -9,则if语句的条件不成立(-9 不大于 0)。因此,R 将执行 else 语句中的代码。运行代码时,R 会打印出“这个数为0或者为负数”。


# if语句
x <- -9

# if else条件判断

if (x > 0) {
  
  print ("这是一个正数")
  
} else {
  
  print ("这个数为0或者为负数")
  
}

在这里插入图片描述

else if 语句

在某些情况下,您可能希望通过添加 else if 语句来进一步自定义条件语句。else if 语句位于 if 语句和 else 语句之间。这是代码结构:

if (条件1) {

expr1

} else if (条件2) {

expr2

} else {

expr3

}

如果满足 if 条件(条件 1),则 R 将执行第一个表达式 (expr1) 中的代码。如果不满足 if 条件,满足 else if 条件(条件 2),则 R 将执行第二个表达式 (expr2) 中的代码。如果这两个条件都不满足,R 将执行第三个表达式 (expr3) 中的代码。

在前面的示例中,仅使用 if else 语句,如果 x 等于 0 或 x 小于零,R 只能打印“这个数为0或者为负数”。假设你希望 R 打印字符串“这个数为零”,你需要使用 else if 语句添加另一个条件。
举个例子:


# if语句
x <- 0

# if else条件判断
if (x < 0) {
  
  print("这是一个负数")
  
} else if (x == 0) {
  
  print("这个数是0")
  
} else {
  
  print("这是一个正数")
  
}

在这里插入图片描述

在代码中,第一个条件将是if语句的一部分,第二个条件将是 else if 语句的一部分,第三个条件将是 else 语句的一部分。

  • 如果 x < 0,则 R 将打印“这是一个负数”。

  • 如果 x = 0,则 R 将打印“这个数是0”。

  • 否则,R 将打印“这是一个正数”。

  • 如果使 x 等于 0,R 将首先检查if条件 (x < 0),并确定它是 FALSE。然后,R 将评估 else if 条件。此条件 x==0 为 TRUE。因此,在这种情况下,R 打印“这个数是0”

好了,逻辑运算符和条件语句就介绍到这里了,希望大家都能多动手去运行代码,多尝试不同的条件来去练习逻辑运算和条件语句,在数据处理或者是编写程序中都会经常用到。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

M冰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值