r语言中的c函数的定义代码,R语言中通过自定义函数大显神通

R语言提供了大量的包为用户解决各方面的问题,同时,R语言中允许用户编写自己的函数来解决实际问题。

自定义函数概述

在R语言中,用户自定义的函数语法格式:

functionname

return (value)

上面的语法中,functionname为函数名称;arglist是参数列表,也可以没有参数,也可以有一个到多个参数;expr是自己编写实现函数功能的语句;value是返回值,如果该函数没有返回值,可以不写return部分。

编写函数时可以使用R编辑器的程序脚本功能来编写:在R软件中选择菜单“文件”—>"新建程序脚本",打开“R编辑器”,编写自己的函数程序。

afcf01bfa658767418e742550682bd39.png新建程序脚本

编辑完后,选择菜单“文件”—>“保存”,输入函数的文件名即可。

2e9066f9d720955f9b6a79a6bce7ab5e.png工具栏上的保存按钮

312754887dfa5650437983b21fe5d22d.png文件菜单中的保存或另存为

在使用自定义函数时,需要将函数加载到R中:可以使用菜单“文件”—>“运行R脚本文件”,然后选择要运行的函数,或者执行代码“source(函数名所在文件名.R)”即可。如在R软件下直接编写的函数,可以直接调用。下面举几个例子来说明一下具体用法。

无参函数

welcome

将该函数保存到文件后,可以在R编辑器中,选中所有代码后,点击工具栏上的“运行当前行或所选代码”后,并在R控制台中输入:welcome(),回车后,就可以看到运行的结果,如下图所示:

e9462e3c5bbdbf2e8fba25c659081ffb.png函数运行结果

虽然这里定义的welcome函数是没有参数的,但是在使用时,括号是不能省略的,即应输入:welcome()

带参数的函数

大多数情况下,函数根据用户传递的参数执行一定的功能,如求一组样本的均值,方差,全距等。这里以求出一个向量中的最大值为例来说明有参函数的定义方法,编写的程序代码如下图所示:

d8084364fa15375cb043afbf0859a940.png

代码中的最后两行是使用该函数的一个情形,在控制台中执行的结果如下图所示:

8c41d58fef66e812bacb0f246d44fdc6.png

这里给出的求向量中最大值的函数并不完美,它只适用于具有2个或2个以上元素的向量,当给出一个元素的向量时会产生错误,如下图所示:

b265b2bcd6cb4cde8491b8f2f75b6c79.png

产生错误的原因是for循环是从第2个元素开始的,当给定一个元素时,就会出错。读者可以对这个函数进行改造,让其在输入1个参数时也能得出正确答案。

带默认值参数的函数

有时一个函数中有多个参数时,部分参数可能在一些情况下用户不必提供或用户无法提供时,可以使用默认值。编写一个函数,求出三个数的最大值。程序代码如下图所示:

c2c61480b04b1d509df066d5631cb2d0.png求三个数的最大值

在这个自定义函数中,n2使用了默认值0,在调用时,下面几种格式都是合法的。

maxnum(1,2,3) ;maxnum(1,n3=3) ;maxnum(n1=1,n2=2,n3=4),其输出结果如下图所示:

ed4a3221b649f3f136fd2931f3ad7c56.png

在上面第二个调用中,参数n2没有给出值,则会使用其默认值,但n3必须使用参数名来调用,否则,会发生n3没有赋值的错误,如下图所示:

69d35d217e8a9fd085057729a6949371.png带默认值的参数

因为R会按照给出的参数列表从左到右依次给每个参数赋值,如不用参数名,45会给了参数n2,造成没有默认值的参数n3没有赋值的错误。最好的做法是,将带有默认值的参数放在所有参数的后面。这样,当我们传递参数时,它依次给前面的值赋值,后边的若没给出值,则使用默认值。如下图所示的做法会很理想。这样,将带默认值的参数放在最后,传递参数时,就不会出错了

2280cc80339a0d4a2ca68308e3f3afa9.png默认参数

希望你能喜欢本篇文章,也希望你能关注本号,本号将持续更新R语言方面的文章,内容由基本语法的使用到具体的数据分析应用。

7164d42ae351b6bc08675d52c2b300ed.png

举报/反馈

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值