介绍
文章图片
控制流(来源:w3schools)
关系运算符
关系运算符或也称为比较器, 可以帮助你查看一个R对象与另一个R对象的关系。例如, 你可以检查两个对象是否相等, 这可以借助==(double equal)符号来完成。两端均为TRUE的逻辑运算符将返回逻辑值TRUE, 因为TRUE等于TRUE, 如下所示。
TRUE == TRUE
TRUE
但是, 如果一侧为TRUE, 另一侧为FALSE, 则将获得逻辑值FALSE作为输出。
TRUE == FALSE
FALSE
除了逻辑变量, 你还可以检查其他类型的相等性。
让我们比较一下字符串和数字。
100 == 100
TRUE
100 == 200
FALSE
'tutorial' == 'R'
FALSE
- 等式运算符的对立面是不等式运算符, 它由!-符号(感叹号后跟等于)的组合给出。
100 != 200
TRUE
'tutorial' != 'R'
TRUE
TRUE != FALSE
TRUE
类似地, 不等式运算符也可以用于数值和其他R对象, 例如矩阵, 向量和列表。
- 如果要检查是否给定了两个R对象, 其中一个大于或小于另一个。好吧, 当然, 你可以使用简单的<
和>
号(小于号和大于号)。
我们首先来看一个数字示例。
2 >
10
FALSE
-200 <
0
TRUE
如你所见, 为什么$ 2 $不大于$ 10 $或$ -200 $为什么小于$ 0 $是不言而喻的。但是, 字符串或字符呢?让我们看看如何实现它。
看起来R优先考虑字母顺序, 同时决定哪个字符串或字符大于另一个。
在下面的示例中, t按照字母顺序排在R之后;因此, t大于R。
'tutorial' >
'RRRRRRRRR'
TRUE
重要的是要注意, 在R和几乎所有编程语言中, TRUE在数值上解释为1, FALSE在数值上解释为0。因此, 基于此类推, TRUE将大于FALSE。
TRUE >
FALSE
TRUE
- 你还可以检查一个R对象是否大于或等于(> =)(或小于或等于< =)另一个R对象。为此, 可以将小于或等于符号与等号结合使用。这意味着, 如果两个条件(小于或等于/大于或等于)之一为TRUE, 则完整条件将为TRUE。
5 >
= 5 # 5 is not greater than 5 but is equal, hence, it returns TRUE.
TRUE
5 >
= 10
FALSE
你可以在此srcmini教程中了解R数据类型。它表明R在处理列表, 矩阵和向量方面相当出色。
R比较器可以处理R向量吗?让我们找出答案。
例如, 你有一个行向量, 其中记录了最近10天在最近的srcmini教程中获得的视图数。现在, 你想知道哪几天收到的观看次数超过或等于100。你可以使用现成的大于号。
srcmini_views <
- c(100, 20, 5, 200, 60, 88, 190, 33, 290, 64)
length(srcmini_views)
10
srcmini_views >
= 100
- true
- false
- false
- true
- false
- false
- true
- false
- true
- false
同样, 你也可以比较两个向量甚至两个矩阵。
youtube_views <
- c(10, 20, 1000, 64, 100, 9, 19, 3, 90, 4)
因此, 通过这种方式, 你可以构建一个简单易用的应用程序, 以查找srcmini教程的观看时间多于youtube视频观看的时间, 反之亦然。
这在R中的工作方式是将两个向量逐个元素地进行比较。例如, 在下面的输出中, 如果考虑两个向量中的第一个元素, 则可以看到srcmini视图向量的值为100, 另一个向量的值为10, 因此返回TRUE。
srcmini_views >
youtube_views
- true
- false
- false
- true
- false
- true
- true
- true
- true
- true
-6 * 5 + 2 >
= -10 + 1 #on left hand side multiplication will be done first and then addition as per BODMAS
FALSE
比较矩阵 R处理不同数据结构进行比较的能力并不仅限于矢量。矩阵和关系运算符也可以无缝协作!
现在, srcmini和YouTube数据已代替矢量(如上例所示)存储在称为视图的矩阵中。第一行包含srcmini信息。第二行是YouTube信息。你将使用R的内置矩阵函数在上一个示例中创建的srcmini和youtube向量的帮助下创建矩阵。
srcmini_views <
- c(100, 20, 5, 200, 60, 88, 190, 33, 290, 64)
youtube_views <
- c(10, 20, 1000, 64, 100, 9, 19, 3, 90, 4)
views <
- matrix(c(srcmini_views, youtube_views), nrow = 2, byrow = TRUE)
views
100 | 20 | 5 | 200 | 60 | 88 | 190 | 33 | 290 | 64 |
10 | 20 | 1000 | 64 | 100 | 9 | 19 | 3 | 90 | 4 |
views == 20
false | true | false | false | false | false | false | false | false | false |
false | true | false | false | false | false | false | false | false | false |
逻辑运算符
R通过提供以下逻辑运算符来帮助你组合关系运算符的结果:
- AND(&)运算符
- OR(|)运算符
- NOT(!)运算符
- AND运算符:和其他任何编程语言一样, R的AND运算符采用两个逻辑值, 仅返回TRUE, 并且仅在两个值都为true时返回, 否则返回false。
文章图片
AND运算符真值表
Let's look at some of the self-explanatory examples.
TRUE &
TRUE # 1.1 = 1
TRUE
TRUE &
FALSE # 1.0 = 0
FALSE
FALSE &
FALSE # 0.0 = 0
FALSE
FALSE &
TRUE # 0.1 = 0
FALSE
同样, 你可以将比较器的结果与这些运算符一起使用, 而不是像上面那样使用逻辑值。
x <
- 100
x <
200 &
x >
= 100# since x is less than 200 but less than equal to 100, so it returns TRUE.
TRUE
x <
200 &
x >
100 # this holds FALSE since the second comparison i.e. x greater than 100 is false.
FALSE
- OR运算符:OR运算符与AND运算符非常相似。但是, 唯一的主要区别在于, 如果OR表达式使用的逻辑值之一为TRUE, 则整个OR表达式为TRUE。
文章图片
或运算符真值表
Let's look at some of the self-explanatory examples.
TRUE | TRUE # 1 + 1 = 1
TRUE
TRUE | FALSE # 1 + 0 = 0
TRUE
FALSE | FALSE # 0 + 0 = 0
FALSE
FALSE | TRUE # 0 + 1 = 0
TRUE
让我们使用与上面使用的相同的数字示例, 但是这次结果应该有所不同。
x <
- 100
x <
200 | x >
100 # this holds TRUE since the first comparison i.e. x less than 100 is True.
TRUE
- NOT运算符:这是最容易理解的运算符, 它否定了它所应用的逻辑运算符, 或者你可以将其视为与逻辑运算符相反的运算符。
文章图片
非运算符真值表
让我们看一些例子!
a = 1
!a # this returns false since not of a will be 0 which is FALSE.
FALSE
a = 0
!a #similar to the above example this return TRUE since a = 0 and not of a is 1.
TRUE
让我们看一下在某些情况下, NOT运算符在处理R的内置函数时会有所帮助。
is.numeric(5) #returns TRUE since 5 is numeric
TRUE
!is.numeric(5) #not of the same will return FALSE
FALSE
is.numeric('aditya')
FALSE
下面的示例在处理数字和字符串数据混合的情况下非常有用, 并且你想从列表中过滤掉字符串/字符而只保留数字数据。
!is.numeric('aditya')
TRUE
最后, 让我们找出逻辑运算符如何在向量和矩阵上起作用。
a <
- c(FALSE, TRUE, FALSE)
b <
- c(TRUE, TRUE, FALSE)
a &
b # AND operator
- false
- true
- false
a | b # OR operator
- true
- true
- false
但是, NOT运算符一次只能应用于一个矢量, 也可以应用于两个矢量的结果。
!a
- true
- false
- true
!b
- false
- false
- true
!(a | b) # NOR operator
- false
- false
- true
你具有与上面定义的矢量形式相同的srcmini教程视图。让我们使用R的tail方法从其中提取最后一个元素。
last <
- tail(srcmini_views, 1)
print (last)
[1] 64
让我们找出最后一个元素是否小于100或大于100。
last <
100 | last >
100
TRUE
由于最后一个元素小于100, 因此表达式之一满足该条件, 因此它返回TRUE。
让我们继续本教程的最后一个主题, 即条件语句!
条件语句
到现在为止, 你已经了解了关系运算符, 它告诉你R对象与彼此之间的关系以及逻辑运算符, 它们允许你组合逻辑值。 R提供了一种组合所有这些运算符并使用结果更改R脚本行为的方式。这样, 让我们??进入if和else语句。
if条件的语法定义如下:if(condition){// expression} if语句接受一个条件(在括号内), 该条件可以与关系或某些逻辑运算符相关, 如果该条件为TRUE, 则执行与条件关联的R代码(位于大括号内)。很简单, 不是吗?
让我们通过一个例子来理解它。
假设你有一个变量x, 它等于-10, 现在, 你将放置一个条件来检查x是否大于零, 并用NOT运算符取反。由于条件为TRUE, 因此将执行大括号内的R代码。
x <
- -10
if (!x >
0){
print("x is a negative number")
}
[1] "x is a negative number"
但是, 如果删除NOT运算符, 则条件将变为FALSE, 并且不会执行大括号内的代码。
if (x >
0){
print("x is a positive number")
}
现在让我们借助语法来了解else语句。 if(condition){// expression1} else {// expression2}与if语句不同, else语句不需要显式条件, 它必须与if语句结合使用。仅当if`语句的条件不为TRUE时, 才执行与else语句关联的R代码。
让我们以相同的if语句示例来了解else语句。
x <
- -10
if (x >
0){
print("x is a positive number")
}else{
print("x is a negative number")
}
[1] "x is a negative number"
在上面的示例中, 由于if语句无效, 因此执行else语句。
与if和else语句类似, 你可以在else和else语句之间使用else if语句。当不满足if语句条件时执行。简而言之, else语句的优先级最高。 if(condition){// expression1} else if(condition){// expression2} else {// expression3}
x <
- 0
if (x >
0){
print("x is a positive number")
}else if (x == 0){
print("x is zero")
}else{
print("x is a negative number")
}
[1] "x is zero"
主要原因是, 我们使用else if语句的原因之一是当前条件不是互斥的, 这意味着它们可以同时发生。让我们看一个例子。
x <
- 12
if (x %% 3 == 0){
print("x is divisible by 3")
}else if (x %% 4 == 0){
print("x is divisible by 4")
}else{
print("x is neither divisible by 3 nor by 4")
}
[1] "x is divisible by 3"
在上面的示例中, if条件变为TRUE, 因此R退出控制结构并且不进入下一个语句, 即使else if条件的求值为TRUE时, 它不会执行。但是, 如果你将使用另一个if条件, 那么将执行if语句, 而不是else if语句。
恭喜你完成了本教程。
对于想学习R编程语言的初学者来说, 本教程是一个很好的起点。作为一项好练习, 你可能希望将关系和逻辑运算符作为条件语句中的条件应用。
像R中的实用程序和使用R的机器学习中的R一样, 仍有一些主题尚未涵盖在R中, 敬请期待!
请随时在下面的评论部分中提出与本教程相关的任何问题。
【R中的条件和控制流】如果你想了解有关R的更多信息, 请参加srcmini的Intermediate R课程。
推荐阅读
- Python中的虚拟环境
- R中的实用程序
- Python Print()函数
- Python Range()函数
- Android-WebView加载网络图片&网页
- 使用maven的mybatis-generator代码生成器插件生成实体类mapper配置文件和mapper接口(使用idea)
- uniApp——v-for 动态class动态style
- WebAppInitializer类,代替web.xml
- AndroidAndroid Studio真机调试的问题统整