我们可以把实现某一功能的代码定义为函数,在需要使用时,随时调用即可,十分方便。对于函数,简单地理解就是可以执行某项工作的代码块,类似积木块可以反复地使用。
在R语言中包括大量的内置函数可以在程序中直接调用。当然,也可以自己创建和使用函数,这种称为自定义函数。下面分别进行介绍。
内置函数指的是R语言自带的函数,包括查看和改变路径的函数、数学函数、字符串函数等。例如,进行统计计算时常用的min()、max()、sum()、mean()等函数。内置函数可以在程序中直接调用,代码如下:
min(23:98) # 最小值 max(23:98) # 最大值 sum(23:98) # 求和 mean(23:98) # 平均值
运行程序,结果如图3.5所示。
图3.5 内置函数
用户自己创建的函数称为自定义函数,可以理解为用户创建了一个具有某种用途的工具。在R语言中,自定义函数主要使用function实现,语法格式如下:
function_name <- function(arg_1, arg_2, ...) { Function body }
参数说明如下。
function_name:函数名称。
arg_1, arg_2, ...:参数,是一个占位符。当函数被调用时,将传递一个值到参数。参数是可选的,也就是说,函数可能不包含参数。参数也可以有默认值。
Function body:函数体,定义函数功能的代码块。
【例3.2】 自定义计算BMI指数的函数 (实例位置:资源包\Code\03\02)
自定义计算BMI(体脂)指数的函数fun_bmi()。运行RGui,新建程序脚本,编写如下代码:
fun_bmi <- function(height,weight) { weight/(height*height) }
代码解析
在上述代码中,fun_bmi是创建的函数名,height和weight是该函数的参数(形参),大括号中的内容为函数体,用于计算BMI指数。
说明
大括号也可以省略,因为函数体只有一行,省略后的代码如下:
fun_bmi <- function(height,weight) weight/(height*height)
调用函数也就是执行函数。如果把创建函数理解为创建一个具有某种用途的工具,那么调用函数就相当于使用该工具。
例如,调用例3.2创建的fun_bmi()函数,示例代码如下:
fun_bmi(1.6,65)
运行程序,结果为:
[1] 25.39062
上述代码也可以指定x和y参数,示例代码如下:
fun_bmi(x=1.6,y=65)
在不特别指定x和y的情况下,R语言自动按位置进行匹配,即1.6为第一个参数,65为第二个参数。
如果自定义函数中没有参数,可以直接调用函数名。示例代码如下:
myfun <- function() { print(4*5) } myfun()
前面创建的函数都只是为了完成特定任务,并不需要返回什么。但在实际开发中,通常需要返回一个执行结果。这就好比主管向下级职员下达命令,职员做完后,还需要反馈结果给主管。函数返回值的作用就是将函数的处理结果返回给调用它的程序。
在R语言中,可以在函数体中使用return()函数为自定义函数指定返回值。如果不使用return()函数,则默认将最后执行的语句的值作为返回值。如果自定义函数需要多个返回值,则可以打包在一个列表(list)中。另外,函数的返回值可以是任何R语言对象。
例如,定义一个计算BMI指数的fun_bmi()函数并要求返回BMI值,代码如下:
fun_bmi <- function(height,weight) { bmi=weight/(height*height) return(bmi) } fun_bmi(1.5,70)