# R学习笔记5 R中函数的定义与使用
2018-10-11 19:15
59 查看
版权声明:All rights reserved by LK12, reprint please explain the source https://blog.csdn.net/qq_40527086/article/details/83017354
R学习笔记5 R中函数的定义与使用
1.创建函数
1.1 创建一个简单的函数
创建一个把输入参数加一输出的函数
addOne = function(x){ x = x+1 } #如果函数体内只有一行代码,也可以省掉花括号 new_x = addOne(x = c(1,2,3)) new_x >[1] 2 3 4
注意,创建一些函数时可能会导致系统自带函数被覆盖,调用优先级发生改变。如系统本来有自定义的median函数,如果我们再重新定义,原函数就会被覆盖。可以使用find(functionName)来查看存在该函数的工作区。
1.2 创建多参数的函数
前面我们涉及到的只含有一个参数,其实多个参数也一样,如把两个数相加的函数
myAdd = function(a,b){ a +b } c = myAdd(1,2) c >[1] 3
可以为参数设定默认值
如:
myAdd = function(a,b=2){ a +b } c = myAdd(a = 1) c >[1] 3
函数返回对象
值得注意的是,R中只允许返回一个对象,如果确实想返回多个可以通过返回一个组合列表的形式来实现。
1.3 简化逻辑输入的函数
假设有这样一个需求,输入参数后。默认之下对其进行对数化操作,也可以更改默认参数使其不进行操作。
logOrNot = function(x,logFlag = T){ if(logFlag) x =log(x) else x = x x } logOrNot(x =c(1,2,3)) >[1] 0.0000000 0.6931472 1.0986123 logOrNot(x =c(1,2,3),logFlag = T) [1] 1 2 3
2.函数的一些常见操作
2.1 使用return(x)提前返回一个对象。
2.2 使用混合条件进行判断,&和&&是有区别的,如test1&test2和test1&&test2,前者两边都会求值然后进行判断,后者只有在第一个值求值后满足条件才会对右边第二个值进行判断。
2.3 使用!反转逻辑值。
2.4 函数命名采用驼峰式命名,如myFun,以小写字母开头。
3.错误和警告处理
在上面的对数函数中,如果用户输入负数,则会发生错误。在特定的情况下,对于某种需求,即使为负数计算不会报错,但是我们不允许有负数输入,这是在判断条件后可以输出警告信息被对数据进行处理。
输出错误信息并停止的函数为stop(‘messgae’)
输出错误信息但不停止的函数为warning(‘messgae’)
4.检查输入
由于我们设计的函数是处理特定类型的数据结构,所以我们首先应该判断输入类型是否正确。
为此,R提供了大量以‘is.'开头的函数
apropos('^is\\.') >[1] "is.array" "is.atomic" "is.call" [4] "is.character" "is.complex" "is.data.frame" [7] "is.double" "is.element" "is.empty.model" [10] "is.environment" "is.expression" "is.factor" [13] "is.finite" "is.function" "is.infinite" [16] "is.integer" "is.language" "is.leaf" [19] "is.list" "is.loaded" "is.logical" [22] "is.matrix" "is.mts" "is.na" [25] "is.na.data.frame" "is.na.numeric_version" "is.na.POSIXlt" [28] "is.na<-" "is.na<-.default" "is.na<-.factor" [31] "is.na<-.numeric_version" "is.name" "is.nan" [34] "is.null" "is.numeric" "is.numeric.Date" [37] "is.numeric.difftime" "is.numeric.POSIXt" "is.numeric_version" [40] "is.object" "is.ordered" "is.package_version" [43] "is.pairlist" "is.primitive" "is.qr" [46] "is.R" "is.raster" "is.raw" [49] "is.recursive" "is.relistable" "is.single" [52] "is.stepfun" "is.symbol" "is.table" [55] "is.ts" "is.tskernel" "is.unsorted" [58] "is.vector"阅读更多
相关文章推荐
- (原创)c#学习笔记06--函数01--定义和使用函数02--参数
- [java学习笔记]java语言基础概述之函数的定义和使用&函数传值问题
- (原创)c#学习笔记06--函数01--定义和使用函数01--返回值
- [C#学习笔记之多线程1]使用ParameterizedThreadStart委托向线程函数传送参数
- Delphi 2010学习笔记(20)---例程的定义与使用---2011-01-26
- C语言学习笔记:13_变量和函数的声明与定义
- 遗传算法与直接搜索工具箱学习笔记 五-----使用GPS算法寻找一个函数的最小值
- 基础学习笔记之opencv(18):kmeans函数使用实例
- Object C学习笔记3-对象的使用和定义
- Unix学习笔记----编程实例-------Link函数的实例使用:
- opencv学习笔记:特征点匹配函数使用注意
- php学习笔记(三十六)smarty中使用自定函数和代码块(smarty2和smarty3的不同)
- C++数据的封装和类体内定义成员函数的学习笔记
- C++学习笔记(八):对字符的操作函数和范围for语句的使用
- javascript学习笔记之函数定义
- Android 学习笔记之AndBase框架学习(三) 使用封装好的函数完成Http请求..
- C语言学习笔记--------伊能C语言学习笔记----使用指针来解决函数的副本机制
- Python学习笔记(七)函数的使用
- 【学习笔记】函数高级使用技巧:建立函数队列
- Spring学习笔记 关于Bean定义的重用-使用abstract以及parent标签属性