R语言函数化学习笔记4
条件语句和循环语句
当你说话时候用到了如果,此时条件出现了
举个条件函数的例子
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的更多相关文章
- R语言函数化学习笔记6
		R语言函数化学习笔记 1.apply函数 可以让list或者vector的元素依次执行一遍调用的函数,输出的结果是list格式 2.sapply函数 原理和list一样,但是输出的结果是一个向量的形式 ... 
- R语言函数化学习笔记3
		R语言函数化学习笔记3 R语言常用的一些命令函数 1.getwd()查看当前R的工作目录 2.setwd()修改当前工作目录 3.str()可以输出指定对象的结构(类型,位置等),同理还有class( ... 
- R语言函数化编程笔记2
		R语言函数化编程笔记2 我学过很多的编程语言,可以我写的代码很啰嗦,一定是我太懒了.或许是基础不牢地动山摇 1.为什么要学函数 函数可以简化编程语言,减少重复代码或者说面向对象的作用 2.函数 2.1 ... 
- R语言函数化编程笔记1
		R语言函数化编程笔记1 notes:有一个不错的网站叫做stack overflow,有问题可以从上面找或者搜索答案,会有大佬相助. 在github上面可以找到很多R的扩展包,如果自己额修改被接受,那 ... 
- R语言函数话学习笔记5
		使用Tidyverse完成函数化编程 (参考了家翔学长的笔记) 1.magrittr包的使用 里面有很多的管道函数,,可以减少代码开发时间,提高代码可读性和维护性 1.1 四种pipeline 1.1 ... 
- R语言与机器学习学习笔记
		人工神经网络(ANN),简称神经网络,是一种模仿生物神经网络的结构和功能的数学模型或计算模型.神经网络由大量的人工神经元联结进行计算.大多数情况下人工神经网络能在外界信息的基础上改变内部结构,是一种自 ... 
- R语言与显著性检验学习笔记
		R语言与显著性检验学习笔记 一.何为显著性检验 显著性检验的思想十分的简单,就是认为小概率事件不可能发生.虽然概率论中我们一直强调小概率事件必然发生,但显著性检验还是相信了小概率事件在我做的这一次检验 ... 
- 【数据分析 R语言实战】学习笔记 第十一章 对应分析
		11.2对应分析 在很多情况下,我们所关心的不仅仅是行或列变量本身,而是行变量和列变量的相互关系,这就是因子分析等方法无法解释的了.1970年法国统计学家J.P.Benzenci提出对应分析,也称关联 ... 
- 【数据分析 R语言实战】学习笔记 第四章 数据的图形描述
		4.1 R绘图概述 以下两个函数,可以分别展示二维,三维图形的示例: >demo(graphics) >demo(persp) R提供了多种绘图相关的命令,可分成三类: 高级绘图命令:在图 ... 
随机推荐
- css position absolute相对于父元素的设置方式
			手机赚钱怎么赚,给大家推荐一个手机赚钱APP汇总平台:手指乐(http://www.szhile.com/),辛苦搬砖之余用闲余时间动动手指,就可以日赚数百元 大家知道css的position abs ... 
- .NET Core 3 Web Api Cors fetch 一直 307 Temporary Redirect
			.NET Core 3 Web Api Cors fetch 一直 307 Temporary Redirect 继上一篇 .net core 3 web api jwt 一直 401 为添加JWT- ... 
- DOTNET Core MVC (一)
			以控台的形式,运行.net core mvc 代码, Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => ... 
- Oracle行结果合计的实现
			Oracle行结果合计的实现,主要应用于日期结果的集计,下面是具体的实现代码. With AA as ( select 'A' tNo , 10 B from dual union select ' ... 
- Lucene之分析器
			什么是分析器? 分析(Analysis)在Lucene中指的是将域(Field)文本转换为最基本的索引表示单元—项(Term)的过程. 分析器(Analyzer)对分析操作进行了封装,通过执行一系列操 ... 
- JavaScript对象模型概念
			1.对象的概念 JavaScript只有函数对象才有类的概念,因此创建一个对象,必须使用函数对象.(ES6中可以直接声明一个class,实质上也是一个函数对象). 函数对象的内部有[[Construc ... 
- echarts--可拖动的曲线图
			<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ... 
- Spark调优指南
			Spark相关问题 Spark比MR快的原因? 1) Spark的计算结果可以放入内存,支持基于内存的迭代,MR不支持. 2) Spark有DAG有向无环图,可以实现pipeline的计算模式. 3) ... 
- 【剑指Offer】62、序列化二叉树
			题目描述 请实现两个函数,分别用来序列化和反序列化二叉树 二叉树的序列化是指:把一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串,从而使得内存中建立起来的二叉树可以持久保存.序列化可以基于先序. ... 
- Spring MVC 定时任务注解说明
			一.注解说明. Spring 自带的定时任务执行@Scheduled注解,可以定时的.周期性的执行一些任务.查看@Scheduled的注解可以看到有以下三种: 1.1 String cron() de ... 
