R语言提供了大量的包为用户解决各方面的问题,同时,R语言中允许用户编写自己的函数来解决实际问题。
自定义函数概述
在R语言中,用户自定义的函数语法格式:
functionname
return (value)
上面的语法中,functionname为函数名称;arglist是参数列表,也可以没有参数,也可以有一个到多个参数;expr是自己编写实现函数功能的语句;value是返回值,如果该函数没有返回值,可以不写return部分。
编写函数时可以使用R编辑器的程序脚本功能来编写:在R软件中选择菜单“文件”—>"新建程序脚本",打开“R编辑器”,编写自己的函数程序。
新建程序脚本
编辑完后,选择菜单“文件”—>“保存”,输入函数的文件名即可。
工具栏上的保存按钮
文件菜单中的保存或另存为
在使用自定义函数时,需要将函数加载到R中:可以使用菜单“文件”—>“运行R脚本文件”,然后选择要运行的函数,或者执行代码“source(函数名所在文件名.R)”即可。如在R软件下直接编写的函数,可以直接调用。下面举几个例子来说明一下具体用法。
无参函数
welcome
将该函数保存到文件后,可以在R编辑器中,选中所有代码后,点击工具栏上的“运行当前行或所选代码”后,并在R控制台中输入:welcome(),回车后,就可以看到运行的结果,如下图所示:
函数运行结果
虽然这里定义的welcome函数是没有参数的,但是在使用时,括号是不能省略的,即应输入:welcome()
带参数的函数
大多数情况下,函数根据用户传递的参数执行一定的功能,如求一组样本的均值,方差,全距等。这里以求出一个向量中的最大值为例来说明有参函数的定义方法,编写的程序代码如下图所示:
代码中的最后两行是使用该函数的一个情形,在控制台中执行的结果如下图所示:
这里给出的求向量中最大值的函数并不完美,它只适用于具有2个或2个以上元素的向量,当给出一个元素的向量时会产生错误,如下图所示:
产生错误的原因是for循环是从第2个元素开始的,当给定一个元素时,就会出错。读者可以对这个函数进行改造,让其在输入1个参数时也能得出正确答案。
带默认值参数的函数
有时一个函数中有多个参数时,部分参数可能在一些情况下用户不必提供或用户无法提供时,可以使用默认值。编写一个函数,求出三个数的最大值。程序代码如下图所示:
求三个数的最大值
在这个自定义函数中,n2使用了默认值0,在调用时,下面几种格式都是合法的。
maxnum(1,2,3) ;maxnum(1,n3=3) ;maxnum(n1=1,n2=2,n3=4),其输出结果如下图所示:
在上面第二个调用中,参数n2没有给出值,则会使用其默认值,但n3必须使用参数名来调用,否则,会发生n3没有赋值的错误,如下图所示:
带默认值的参数
因为R会按照给出的参数列表从左到右依次给每个参数赋值,如不用参数名,45会给了参数n2,造成没有默认值的参数n3没有赋值的错误。最好的做法是,将带有默认值的参数放在所有参数的后面。这样,当我们传递参数时,它依次给前面的值赋值,后边的若没给出值,则使用默认值。如下图所示的做法会很理想。这样,将带默认值的参数放在最后,传递参数时,就不会出错了
默认参数
希望你能喜欢本篇文章,也希望你能关注本号,本号将持续更新R语言方面的文章,内容由基本语法的使用到具体的数据分析应用。
举报/反馈