第十一课 逻辑运算和循环

lidong

18/05/2021

逻辑运算

R中有两个逻辑值,也称为布尔值。 它们分别是TRUE和FALSE。 在R中,可以构造逻辑表达式,其结果为TRUE或FALSE。

逻辑运算见下表

表1:逻辑运算符

看下面的例子

> mtcars$mpg<15
##  [1] FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE
## [13] FALSE FALSE  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE
## [25] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
> mtcars$am==1
##  [1]  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [13] FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE
## [25] FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
> mtcars$am!=1
##  [1] FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
## [13]  TRUE  TRUE  TRUE  TRUE  TRUE FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE
## [25]  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
> TRUE & c(TRUE, FALSE, FALSE)#使用&运算符对向量进行与运算
## [1]  TRUE FALSE FALSE
> TRUE && c(TRUE, FALSE, FALSE)#&&仅比较向量的第一个成员比
## [1] TRUE

\(~\) 逻辑运算常见的函数

-isTRUE()函数,它接受一个参数,如果参数的计算结果为真,则返回TRUE,反之返回FALSE

-函数identical()用来比较两个R对象是否一致,一致时返回TRUE

-异或函数xor()。这个函数接受2个参数,当一个参数为TRUE,另一个参数为FALSE时,结果返回TRUE,其他情况返回FALSE

-which()函数会返回参数表达式中结果为TRUE的元素索引

-函数any()和all()都将逻辑向量作为其参数。 如果逻辑向量中的一个或多个元素为TRUE,则any()函数将返回TRUE。 如果逻辑向量中的每个元素均为TRUE,则all()函数将返回TRUE

试着理解下面的结果吧

> isTRUE(6 > 7)
## [1] FALSE
> identical('you', 'yuo')
## [1] FALSE
> xor(T, F)
## [1] TRUE
> which(mtcars$am!=1)
##  [1]  4  5  6  7  8  9 10 11 12 13 14 15 16 17 21 22 23 24 25
> any(mtcars$mpg<12)
## [1] TRUE
> all(mtcars$mpg>12)
## [1] FALSE

循环

R语言三种简单循环方式:

(1)for循环

(2)while循环

(3)repeat循环

> for (i in 1:5)
+ {
+   print("How do you do?")
+ }
## [1] "How do you do?"
## [1] "How do you do?"
## [1] "How do you do?"
## [1] "How do you do?"
## [1] "How do you do?"
> i <- 0
> while (i<5) 
+ {
+   print("I'm happy")
+   i=i+1
+ }
## [1] "I'm happy"
## [1] "I'm happy"
## [1] "I'm happy"
## [1] "I'm happy"
## [1] "I'm happy"
> i <- 0
> repeat {
+   print("Hi")
+   i <- i + 1
+   if (i > 4)
+     break
+ }
## [1] "Hi"
## [1] "Hi"
## [1] "Hi"
## [1] "Hi"
## [1] "Hi"

条件语句

R语言三种简单循环方式:
可以在R中使用条件if…else语句来实现决策

> x <- 5
> if(x > 0){
+ print("Positive number")
+ }
## [1] "Positive number"
> x <- -5
> if(x > 0){
+ print("Non-negative number")
+ } else {
+ print("Negative number")
+ }
## [1] "Negative number"
> ifelse(x>0,"Non-negative number","Negative number")
## [1] "Negative number"

课堂练习

请大家用循环语句画图,要求如下:
1)通过原点画直线;

2)直线的斜率为tan \(\alpha\)

3)\(\alpha\)\(0^o\)开始每隔\(10^o\)画一副图,共画36幅图;

4)把36幅图保存到制定文件夹;

课堂练习-黄老师给出的思路

# x <- seq(-5,5,length.out=100)
# png("ex%02d.png",width=800, height=800)
# for (angle in seq(0, 350, by = 10))
# {
#   slope=tan(angle/360*(2*pi))
#   y=slope*x
#   plot(x,y,type = "l",col="red",
#        ylim = c(-5,5),xlim = c(-5,5),asp=1)
# }
# dev.off()