



我们可以把实现某一功能的代码定义为函数,在需要使用时,随时调用即可,十分方便。对于函数,简单地理解就是可以执行某项工作的代码块,类似积木块可以反复地使用。
在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:函数名称。
    function_name:函数名称。
   
     arg_1, arg_2, ...:参数,是一个占位符。当函数被调用时,将传递一个值到参数。参数是可选的,也就是说,函数可能不包含参数。参数也可以有默认值。
    arg_1, arg_2, ...:参数,是一个占位符。当函数被调用时,将传递一个值到参数。参数是可选的,也就是说,函数可能不包含参数。参数也可以有默认值。
   
     Function body:函数体,定义函数功能的代码块。
    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)