
第3章R函数与流程控制
第3章 R函数与流程控制

本章学习目标1.掌握编写自定义R函数2.理解函数也是一个对象的概念3.理解return()函数在R语言中的地位4.理解R语言中的GenericFunction5.掌握R语言中的分支结构6.掌握R语言中的循环结构
本章学习目标 1. 掌握编写自定义R函数 2. 理解函数也是一个对象的概念 3. 理解return( )函数在R语言中的地位 4. 理解R语言中的Generic Function 5. 掌握R语言中的分支结构 6. 掌握R语言中的循环结构

3.1编写自己的R函数1.概述R语言包含了丰富的内部函数,R语言的扩展包中也包含了大量的可实用函数。这些函数有的是R的核心团队提供的,有的是各个专业领域的专业人才提供的。在真实的项目中这些函数可以完成大部分开发者的需求,但还是有一些项目的需求这些函数不能完美的实现,或者某些函数的实现并不能达到自已的项目目标。因此若是想成为一个合格的R程序员或者R数据分析师就需要会编写自已的R函数来完成自已的项目需求。这种R函数被开发人员称之为自定义函数
3.1 编写自己的R函数 1. 概述 R语言包含了丰富的内部函数,R语言的扩展包中也包含了大量的可实用函数。这些函数有 的是R的核心团队提供的,有的是各个专业领域的专业人才提供的。在真实的项目中这些 函数可以完成大部分开发者的需求,但还是有一些项目的需求这些函数不能完美的实现, 或者某些函数的实现并不能达到自己的项目目标。因此若是想成为一个合格的R程序员或 者R数据分析师就需要会编写自己的R函数来完成自己的项目需求。这种R函数被开发人员 称之为自定义函数

【例3-1】编写一个计算最贵水果和最便宜水果每斤的价格差的程序,要求用一个向量来存储水果每斤单价##myR 3_1.R##构建一个向量来存储水果的单价 <- c(5,3,6,12,2,20)#找到最大值x.max<-max(x)#找到最小值x.min<- min(x)#计算最大值和最小值的差值y<-x.max-x.miny运行结果:[1] 18
# # myR_3_1.R # x <- c(5,3,6,12,2,20) # 构建一个向量来存储水果的单价 x.max<- max(x) # 找到最大值 x.min<- min(x) # 找到最小值 y <- x.max - x.min # 计算最大值和最小值的差值 y 运行结果: [1] 18 【例3-1】编写一个计算最贵水果和最便宜水果每斤的价格差的程序,要求用一个向量来存储水果每斤单价

3.1编写自己的R函数2.编写自定义R函数自定义函数的格式如下:function_name<-function(arg_1,arg_2,...)Function bodyreturn()函数组件包括以下几个部分:,①函数名称(function_name):这是函数的实际名称。函数的所有内容以这个名称做一个对象存储在R环境中。:②参数(arg):参数是一个占位符。当函数被调用时,可以传递一个值到参数中。参数是可选的,也就是说一个函数可能包含一个参数也可能包含多个参数或者不包含参数。③函数体(Functionbody):函数中所有语句集合是函数体。④返回值(return):函数的返回值是函数需要给出的结果
3.1 编写自己的R函数 2. 编写自定义R函数 自定义函数的格式如下: function_name <- function(arg_1, arg_2, .) { Function body return()} 函数组件包括以下几个部分: • ①函数名称(function_name):这是函数的实际名称。函数的所有内容以这个名 称做一个对象存储在R环境中。 • ②参数(arg):参数是一个占位符。当函数被调用时,可以传递一个值到参数中。 参数是可选的,也就是说一个函数可能包含一个参数也可能包含多个参数或者不包 含参数。 • ③函数体(Function body):函数中所有语句集合是函数体。 • ④返回值(return):函数的返回值是函数需要给出的结果

3.1编写自己的R函数2.编写自定义R函数【例3-1】编写一个计算最贵水果和最便宜水果每斤的价格差的程序,要求用一个向量来存储水果每斤单价。##myR_3_2.R#myfu_1 x myfu_1(x)[1]18
3.1 编写自己的R函数 2. 编写自定义R函数 # # myR_3_2.R # myfu_1 x myfu_1(x) [1] 18 【例3-1】编写一个计算最贵水果和最便宜水果每斤的价格差的程序,要求用一个向量来存储水果每斤单价

3.1编写自己的R函数3.简化R程序(1)可以省略最后一行的return()代码,R语言默认会返回最后一行程序代码:(2)在自定义的函数中函数主体需要用“()”括起来的。在R语言中有一项规定,如果函数的主体只有一行,是可以省略“”4.返回值(1)return()函数可以把一个值返回给主调函数;(2)return()函数可以结束R程序
3.1 编写自己的R函数 3. 简化R程序 (1)可以省略最后一行的return( )代码,R语言默认会返回最后一行程序代码; (2)在自定义的函数中函数主体需要用“{}”括起来的。在R语言中有一项规定,如果 函数的主体只有一行,是可以省略“{}”。 4. 返回值 (1)return( )函数可以把一个值返回给主调函数; (2)return( )函数可以结束R程序

3.1编写自己的R函数5.函数的参数(1)多个参数的函数:如果一个函数有多个参数,那么只需要将多个参数放到函数的参数表中,并且各个参数之间用“,”隔开即可;【例3-4】编写一个函数,用于分别打印传入的第一个参数和第二个参数。代码如下##myR_3_7.R#myfu_1myfu_1("first","second")[1]“第一个参数:first,第二个参数:second">myfu_1("second","first")[1]"第一个参数:second,第二个参数:first
3.1 编写自己的R函数 5. 函数的参数 (1)多个参数的函数:如果一个函数有多个参数,那么只需要将多个参数放到函数的参 数表中,并且各个参数之间用“,”隔开即可; # # myR_3_7.R # myfu_1 myfu_1(“first”, “second”) [1] “ 第一个参数:first, 第二个参数:second ” > myfu_1(“second”, “first”) [1] “ 第一个参数:second, 第二个参数:first ” 【例3-4】编写一个函数,用于分别打印传入的第一个参数和第二个参数。代码如下: 位置一致原则

【例3-1】编写一个函数,用于分别打印传入的第一个参数和第二个参数。代码如下## myR_3_7.R#myfu_1myfu1(x1="first"x2="second")[1]"第一个参数:first,第二个参数:second">myfu1(x2="second",“first"[1]第一个参数:first,第二个参数:second
# # myR_3_7.R # myfu_1 myfu_1(x1=“first”, x2=“second”) [1] “ 第一个参数: first, 第二个参数: second ” > myfu_1(x2=“second”, “first”) [1] “ 第一个参数: first, 第二个参数: second ” 【例3-1】编写一个函数,用于分别打印传入的第一个参数和第二个参数。代码如下: 名称一致原则

【例3-4】编写一个函数,用于分别打印传入的第一个参数和第二个参数。代码如下## myR 3 8.R#myfu_1myfu_1(x="first"“second")Errorin myfu 1(x="second","first")argument 1 matches multiple formal arguments
# # myR_3_8.R # myfu_1 myfu_1(x=“first”, “second”) Error in myfu_1(x = "second", "first") : argument 1 matches multiple formal arguments 【例3-4】编写一个函数,用于分别打印传入的第一个参数和第二个参数。代码如下: 前缀一致原则