条件语句和循环语句

当你说话时候用到了如果,此时条件出现了

举个条件函数的例子

sign_t<-function(x){
if(x>0){
return(1)
}else if(x<0){
return(-1)
}else{
return(0)
}
}
sign_t(5)
#[1] 1

这是简单问题,复杂的问题,不行就把需求写下来,计算机语言不过就是傻瓜式的执行你要做的事情,本来是用来减少重复操作的,语言都一样,星星你要加油喽,把之前没学过的补回来

泛化的结构

if (condition1){
express1
} else if (condition2){
express2
} else if (condition3){
express3
}...
}else (condition final){
express final
}
}

x写一个成绩的小的demo

> grade<-function(name,score){
+ if (score<70){
+ return("D")
+ }else if (score>=70&&score<80){
+ return("C")
+ }else if (score>=80&&score<90){
+ return("B")
+ }else {
+ return("A")
+ }
+ }
> grade(89)
[1] "B"
> 另一个小demo
namegrade<-function(name,score){
+ grade<-
+ if (score<70) "D"
+ else if (score>=70&&score<80) "C"
+
+ else if (score>=80&&score<90) "B"
+
+ else "A"
+
+ cat("the grade of",name,"is",grade)
+ }
> namegrade("jhon",89)
the grade of jhon is B 再来一个
gradename<-function(name,score){
if (score<70){
grade<-"D"
cat("what a pity!\n")
}else if (score>=70&&score<80){
grade<-"C"
}else if (score>=80&&score<90) {
grade<-"B"
}else{
grade<-"A"
cat("good\n")
}
cat("the grade of",name,"is",grade)
}
gradename("xing",90)
##good
the grade of xing is A

因为if的本质是一个原函数,它的返回值就是满足条件分支表达式的值,所以这个表达式也可以作为内联函数

 sign_1<-function(x){
+ if (x>0) 1 else if (x<0) -1 else 0
+ }
> sign_1(5)
[1] 1
>

ifelse

这个函数接受一个逻辑向量作为判定条件,并且返回一个向量,对于逻辑判定条件内的每一个元素,若是true,则选择第2个参数yes中所对应的元素,若是FALSE

,则选择第3个参数no中对应的元素

小demo

  ifelse(c(TRUE,FALSE,FALSE),c(1,2,3),c(4,5,6))
[1] 1 5 6

switch 略

循环表达式

官方解释:

循环(或者迭代)通过迭代一个向量(for)或检查某个条件是否被违背(while)来重复执行某个表达式

若只是在输入值上做一些改变,而要重复执行同样的任务,目的是为了减少冗余代码

使用for循环

for循环通过迭代一个给定向量或者列表,重复执行某个表达式

语法格式

for (var in vector){
expr
}
var 遍历vector中的各个元素的值,expr,被反复迭代执行,如果vector中有n个元素,那这个表达式等价于
var<-vector[[1]]
expr
var<-vector[[2]]
expr
var<-vector[[3]]
expr 来个小demo
```{r}
> for (i in 1:3){
+ cat("the value of i is ",i,"\n")
+ }
the value of i is 1
the value of i is 2
the value of i is 3

当然啦,迭代可以作用于所有类型的向量,不仅仅是数值型的向量

for (word in c("hello","new","world")){
cat("the word is",word,"\n")
}

或者是迭代一个列表

>  loop_list<-list(
+ a=c(1,2,3),
+ b=c("a","b","c","d"))
> for (item in loop_list){
+ cat("item:\n lenhth:",length(item),"\n class:",class(item),"\n")
+ }
item:
lenhth: 3
class: numeric
item:
lenhth: 4
class: character

在迭代一个数据框的时候可以看成一个列表,但是注意数据框的列(元素)长度要一致,默认迭代的话是按照列执行的

来个小demo

>  df<-data.frame(
+ x=c(1,2,3),
+ y=c("a","b","c"),
+ stringsAsFactors = FALSE)
> for (col in df){
+ str(col)
+ }
num [1:3] 1 2 3
chr [1:3] "a" "b" "c"

后面可以学一下apply函数,map,要比for好使

有时候可以利用循环外的变量来记录迭代状态或累积过程,比如求100内的和

> s<-0
> for(i in 1:100){
+ s<-s+i
+ }
> s
[1] 5050

简单的模拟一下随机游走的过程

> set.seed(123)
> x<-numeric(1000)
> for (t in 1:(length(x)-1)){
+ x[[t+1]]<-x[[t]]+rnorm(1,0,0.1)
+ }
> plot(x,type="s",main="Random walk",xlab="t")

有时候 可以中断for循环

> for (i in 1:5){
+ if(i==3) break
+ cat("message",i,"\n")
+ }
message 1
message 2

另外可以使用next函数跳过本次迭代剩余的部分

> for (i in 1:5){
+ if(i==3) next
+ cat("message",i,"\n")
+ }
message 1
message 2
message 4
message 5

循环嵌套

俩for循环套一起,常见应用,乘法口诀表

> for(i in 1:9){
+ for(j in 1:9){
+ cat("i*j=",i*j,"\n")
+ }
+
+ }
i*j= 1
i*j= 2
i*j= 3
i*j= 4
i*j= 5
i*j= 6
i*j= 7
i*j= 8
i*j= 9
i*j= 2
i*j= 4
i*j= 6
i*j= 8
i*j= 10
i*j= 12
i*j= 14
i*j= 16
i*j= 18
i*j= 3
i*j= 6
i*j= 9
i*j= 12
i*j= 15
i*j= 18
i*j= 21
i*j= 24
i*j= 27
i*j= 4
i*j= 8
i*j= 12
i*j= 16
i*j= 20
i*j= 24
i*j= 28
i*j= 32
i*j= 36
i*j= 5
i*j= 10
i*j= 15
i*j= 20
i*j= 25
i*j= 30
i*j= 35
i*j= 40
i*j= 45
i*j= 6
i*j= 12
i*j= 18
i*j= 24
i*j= 30
i*j= 36
i*j= 42
i*j= 48
i*j= 54
i*j= 7
i*j= 14
i*j= 21
i*j= 28
i*j= 35
i*j= 42
i*j= 49
i*j= 56
i*j= 63
i*j= 8
i*j= 16
i*j= 24
i*j= 32
i*j= 40
i*j= 48
i*j= 56
i*j= 64
i*j= 72
i*j= 9
i*j= 18
i*j= 27
i*j= 36
i*j= 45
i*j= 54
i*j= 63
i*j= 72
i*j= 81
咋这么奇怪???

for循环虽然很好用,但是应该优先考虑内置函数,比如lapply等

while循环 略

notes:

在循环中:

break语句是跳出循环不再往后执行了,

next语句是跳出本次循环,进行下一次的迭代

这俩直接用就可以了,不用加()

R语言函数化学习笔记4的更多相关文章

  1. R语言函数化学习笔记6

    R语言函数化学习笔记 1.apply函数 可以让list或者vector的元素依次执行一遍调用的函数,输出的结果是list格式 2.sapply函数 原理和list一样,但是输出的结果是一个向量的形式 ...

  2. R语言函数化学习笔记3

    R语言函数化学习笔记3 R语言常用的一些命令函数 1.getwd()查看当前R的工作目录 2.setwd()修改当前工作目录 3.str()可以输出指定对象的结构(类型,位置等),同理还有class( ...

  3. R语言函数化编程笔记2

    R语言函数化编程笔记2 我学过很多的编程语言,可以我写的代码很啰嗦,一定是我太懒了.或许是基础不牢地动山摇 1.为什么要学函数 函数可以简化编程语言,减少重复代码或者说面向对象的作用 2.函数 2.1 ...

  4. R语言函数化编程笔记1

    R语言函数化编程笔记1 notes:有一个不错的网站叫做stack overflow,有问题可以从上面找或者搜索答案,会有大佬相助. 在github上面可以找到很多R的扩展包,如果自己额修改被接受,那 ...

  5. R语言函数话学习笔记5

    使用Tidyverse完成函数化编程 (参考了家翔学长的笔记) 1.magrittr包的使用 里面有很多的管道函数,,可以减少代码开发时间,提高代码可读性和维护性 1.1 四种pipeline 1.1 ...

  6. R语言与机器学习学习笔记

    人工神经网络(ANN),简称神经网络,是一种模仿生物神经网络的结构和功能的数学模型或计算模型.神经网络由大量的人工神经元联结进行计算.大多数情况下人工神经网络能在外界信息的基础上改变内部结构,是一种自 ...

  7. R语言与显著性检验学习笔记

    R语言与显著性检验学习笔记 一.何为显著性检验 显著性检验的思想十分的简单,就是认为小概率事件不可能发生.虽然概率论中我们一直强调小概率事件必然发生,但显著性检验还是相信了小概率事件在我做的这一次检验 ...

  8. 【数据分析 R语言实战】学习笔记 第十一章 对应分析

    11.2对应分析 在很多情况下,我们所关心的不仅仅是行或列变量本身,而是行变量和列变量的相互关系,这就是因子分析等方法无法解释的了.1970年法国统计学家J.P.Benzenci提出对应分析,也称关联 ...

  9. 【数据分析 R语言实战】学习笔记 第四章 数据的图形描述

    4.1 R绘图概述 以下两个函数,可以分别展示二维,三维图形的示例: >demo(graphics) >demo(persp) R提供了多种绘图相关的命令,可分成三类: 高级绘图命令:在图 ...

随机推荐

  1. css沉默

    css变色龙实现. ==== css 1 水平居中和垂直居中. 2 css布局方式. 3 你写过UI框架么.

  2. 北京智和信通IT运维管理系统二次开发服务提供商

    随着云计算.大数据.物联网.移动互联网.人工智能.5G等高新技术的快速发展,数据中心及网络基础设施呈现出井喷式的增长模式,对设备商来说,多.快.好.省的实现定制化网络管理开发,可极大的扩充设备适用范围 ...

  3. js+vue、纯js 按条件分页

    听说大牛都从博客开始的... 人狠话不多,翠花上酸菜代码: 有注解基本上都看的懂!但是自己还是要注意以下几点,免得以后再浪费时间. #.vue 中监听事件 v-on:change=“vueChange ...

  4. leetcode--js--Longest Substring Without Repeating Characters

    问题描述: Given a string, find the length of the longest substring without repeating characters. Example ...

  5. Mybatis注解开发多表一对一,一对多

    Mybatis注解开发多表一对一,一对多 一对一 示例:帐户和用户的对应关系为,多个帐户对应一个用户,在实际开发中,查询一个帐户并同时查询该账户所属的用户信息,即立即加载且在mybatis中表现为一对 ...

  6. 在Docker中运行SpringBoot程序

    1.将SpringBoot项目中pom.xml的build插件更换为: <build> <plugins> <plugin> <groupId>org. ...

  7. php根据字段相识度进行排序查询

    $data = [ [ 'id'=>1, 'title'=>'test内容管理系统', ], [ 'id'=>2, 'title'=>'开源test', ], [ 'id'=& ...

  8. c#XML的基本使用

    创建XML文档 static void Main(string[] args) { //1.引入命名空间 //2.创建XML文档对象 XmlDocument xmldoc = new XmlDocum ...

  9. 【笔记】机器学习 - 李宏毅 - 13 - Why Deep

    当参数一样多的时候,神经网络变得更高比变宽更有效果.为什么会这样呢? 其实和软件行业的模块化思想是一致的. 比如,如果直接对这四种分类进行训练,长发的男孩数据较少,那么这一类训练得到的classifi ...

  10. 安装TensorFlow失败

    ERROR: Could not find a version that satisfies the requirement tensorflow==2.1.0 (from versions: non ...