您的位置:首页 > 其它

# 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"
阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: