R for data science 第14章 函数
14.1 简介函数具有以下 3 个主要优点。 可以给函数起一个意味深长的名字,从而让代码更容易理解。 如果需求发生了变化,只需要修改一处代码即可,无须修改多处。 消除了复制粘贴时可能出现的无心之失(比如,修改了一处的变量名称,但却没有修改另一处)。
14.2 什么时候应该使用函数14.3 人与计算机的函数函数名 理想的函数名应该既简短,又能清楚地说明函数的作用 函数名应该是动词,而参数名应该是名词。但也有例外:如果函数计算的是一 个众所周知的名词(比如,mean() 要比 compute_mean() 好),或者读取的是对象的某种属性 (比如,coef() 要比 get_coefficients() 好)时,那么函数名使用名词也是可以的 如果你的函数名由多个单词组成,那么我们建议用“snake_case”命名法,即使用小写单词,单词之间用下划线隔开。另一种常用的命名法是“camelCase”,即首个单词小写,其余单词首字母大写。 如果你有一族功能相似的函数,那么一定要确保它们具有一致的名称和参数。可以使用一个通用前缀来表明它们之间的联系,这种方式比使用通用后缀更好,因为如果 IDE 有自动完成功能,那么就可以在输入前缀后列举出这个函数族中的所有成员 应该使用注释(即由 # 开头的行)来解释代码,需要解释的是“为什么” RStudio 提供了键盘快捷方式来创建这种分节标记,即 Ctrl+Shift+R,并且可以在脚本编辑器左下角的代码浏览弹出菜单中显示这些标记
file:///Users/huimei/Library/Application%20Support/typora-user-images/image-20181128084614308.png?lastModify=1543389899 14.4 条件执行if(condition) {
# 条件为真时执行的代码
} else{
# 条件为假时执行的代码 }if(this) {
# 做一些操作
} elseif(that) { # 做另外一些操作
} else{
#
}#> function(x, y, op) {
#> switch(op,
#>
#>
#>
#>
#>
#> )
#> }
plus=x+y,
minus=x-y,
times=x*y,
divide=x/y,
stop("Unknown op!")14.5 函数参数选择参数名称 通常应该选择那些较长的、更具描述性的名称 记住短短通用名称 x, y, z:向量 w:权重向量 df:数据框 i, j:数值索引(通常用于表示行和列)。 n:长度或行的数量 p:列的数量
点点点(...) R 中的很多函数可以接受任意数量的输入,...(读作点点点)。这个特殊参数会捕获任意数量的未匹配参数。因为你可以将它捕获的值传给另一个函数。 然非常方便,但这种技术是有代价的:所有拼写错误的参数都不会引发错误消息。这使得我们很难发现输入错误 如果想要检查 ... 中的值,那么你可以使用 list(...)。
惰性求值 14.6 返回值对于返回值,以下两个问题需要你仔细思考 提前返回能否让函数更易读? 你能使得自己的函数支持管道操作吗?
显式返回语句 使得函数支持管道
14.7 环境 |