首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

R语言笔记7:functions——编写函数所需的基础知识

上一讲通过三个简单的例子体验了一下如何在R中写函数,下面来详细学习有关R语言中函数的知识。

Functions in R

主要分三个部分来讲解函数:

编写函数所需的基础知识

相关语法作用域

R语言作用域的规则

编写函数所需的基础知识

R语言通过 指令来命名和创建函数。首先要给函数赋值,也就是命名,然后在小括号中写入参数,最后再大括号中写入函数要执行的语句,其基本语法是:

同时在R中,你可以将函数作为参数传递给其他函数,即嵌套。

函数的返回值是函数执行部分中的最后一行表达式。

编写函数的过程中我们可以设置和命名参数,这些参数可以代表数值、矩阵、数据框或逻辑值等等。同时也可以设置一些具有缺省值(默认值)的参数。

形式参数(formal arguments)

形式参数是包含在函数定义里的参数。

会将一个函数作为输入(input),并返回函数所有的形式参数组成的列表。

在R中,不是所有命令都用到所用的形式参数。加入一个函数中设置了10个参数,但我们往往并不需要指定每个参数的值是啥,所以函数可以缺失某些参数。当没有明确赋值是,它的取值就是缺省值(默认值,default value)

匹配参数(argument matching)

可以根据位置或名称来匹配函数参数,这是编写和调用函数的关键。

以计算数据标准差的函数 为例。

以上所有表达式都是等价的,但是最好不要调换参数位置。

如果函数中参数较多,那么最好使用位置匹配。

比如 函数(把数据拟合到线性模型),它的参数列表这么长:

前五个参数都没有缺省值,依次是,公式、数据、子集、权重等。这里使用者必须要指定他们的值。

大多数情况下,我们不知道参数的具体位置,所以在命令行中,命名参数来匹配最安全。

The order of operations when given an argument is:

Check for exact match for a named argument

Check for a partial match

Check for a positional match

惰性求值(Lazy Evaluation)

惰性求值是R语言的一个关键特性,也是许多编程语言常用的模型。仅在使用函数参数时对其求值。

第一个例子:

这里定义函数f,有两个参数,但返回值仅仅是a的平方。所以当运行f(2)时,和b无关,所以系统自动跳过,不会报错。

第二个例子:

这里同样定义f有两个参数,但返回值是a和b,所以当输入f(45)时,因为第二个位置上缺少b的赋值,所以会报错。这里就是用了惰性求值,即,仅在使用这个参数的时候进行求值,在这之前的程序都是有效的并可以执行,直至运行到出错的部分。

特殊参数

参数是一种特殊的参数,表明一些可以传递给另一个函数的参数。常用于当你需要扩展另一个函数,而你又不想复制原函数的整个参数列表时。

如下例,你希望修改 函数中的个别参数,而其他参数保持不变,将其应用于一个新定义的函数中 :

在泛型函数(generic function)中, 还有另一种用法,它的作用是根据数据类型使用合适的方法

泛型函数是一个函数族,其中的每个函数都有相似的功能,但是适用于某个特定的类。

还有一种情况下, 参数必须使用:

那就是,当传递到函数的参数数量不能事先确定的时候。

比如 函数,他的作用是将一连串字符串连接起来,然后新建一个字符串或向量,所以无法预知参数个数:

还有 函数,它的功能是和 相似,也是连接字符串。

使用 函数的一个注意事项:

就是任何出现在 之后的参数列表必须明确的给出名称。而且不能够部分匹配或位置匹配

举例:

不能位置匹配或部分匹配:

参考资料:

视频课程 R Programming by Johns Hopkins University:https://www.coursera.org/learn/r-programming/home/welcome

讲义 Programming for Data Science :https://bookdown.org/rdpeng/rprogdatascience/R

-------------------我是求关注的分界线--------------

欢迎大家跟我一起上车~~~~

请关注↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180319G1JH6900?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券