R语言教程:函数

2022-08-0211:23:29编程语言入门到精通Comments1,332 views字数 1724阅读模式

函数是一组一起执行一个任务的语句。R 语言本身提供了很多的内置函数,当然我们也可以自己创建函数。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26429.html

您可以把代码划分到不同的函数中。如何划分代码到不同的函数中是由您来决定的,但在逻辑上,划分通常是根据每个函数执行一个特定的任务来进行的。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26429.html

函数声明告诉编译器函数的名称、返回类型和参数。函数定义提供了函数的实际主体。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26429.html

R 语言中函数是一个对象,可以拥有属性。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26429.html

定义函数

R 语言中的函数定义使用 function 关键字,一般形式如下:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26429.html

function_name <- function(arg_1, arg_2, ...) {
    // 函数体
}

说明:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26429.html

  • function_name : 为函数名
  • arg_1, arg_2, ... : 形式参数列表

函数返回值使用 return()文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26429.html


内置函数

R 语言提供了很多有用的内置函数,我们无需定义它就可以直接使用。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26429.html

例如:seq(), mean(), max(), sum(x) 以及 paste(...) 等。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26429.html

实例

# 输出  32 到 44 到的所有数字
print(seq(32,44))文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26429.html

# 计算两个数的平均数
print(mean(25:82))文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26429.html

# 计算 41 到 68 所有数字之和
print(sum(41:68))文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26429.html

执行以上代码,输出结果为:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26429.html

 [1] 32 33 34 35 36 37 38 39 40 41 42 43 44
[1] 53.5
[1] 1526

自定义函数

我们可以自己创建函数,用于特定到功能,定义后可以向内置函数一样使用它们。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26429.html

下面演示两如何自定义函数:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26429.html

实例

# 定义一个函数,用于计数一个系列到平方值
new.function <- function(a) {
for(i in 1:a) {
b <- i^2
print(b)
}
}

接下来我们可以调用函数:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26429.html

实例

new.function <- function(a) {
for(i in 1:a) {
b <- i^2
print(b)
}
}文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26429.html

# 调用函数,并传递参数
new.function(6)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26429.html

执行以上代码,输出结果为:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26429.html

[1] 1
[1] 4
[1] 9
[1] 16
[1] 25
[1] 36

我们也可以创建一个不带参数的函数:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26429.html

实例

new.function <- function() {
for(i in 1:5) {
print(i^2)
}
}文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26429.html

# 调用函数,不需要传递参数
new.function()文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26429.html

执行以上代码,输出结果为:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26429.html

[1] 1
[1] 4
[1] 9
[1] 16
[1] 25

带有参数值的函数

函数参数,可以按函数创建时的顺序来传递,也可以不按顺序,但需要指定参数名:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26429.html

实例

# 创建函数
new.function <- function(a,b,c) {
result <- a * b + c
print(result)
}文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26429.html

# 不带参数名
new.function(5,3,11)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26429.html

# 带参数名
new.function(a = 11, b = 5, c = 3)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26429.html

执行以上代码,输出结果为:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26429.html

[1] 26
[1] 58

函数创建时也可以为参数指定默认值,如果调用的时候不传递参数就会使用默认值:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26429.html

实例

# 创建带默认参数的函数
new.function <- function(a = 3, b = 6) {
result <- a * b
print(result)
}文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26429.html

# 调用函数,但不传递参数,会使用默认的
new.function()文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26429.html

# 调用函数,传递参数
new.function(9,5)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26429.html

执行以上代码,输出结果为:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26429.html

[1] 18 [1] 45文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26429.html

懒惰计算的函数

懒惰计算将推迟计算工作直到系统需要这些计算的结果。如果不需要结果,将不用进行计算。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26429.html

默认情况下,R 函数对参数的计算是懒惰的,就是只有我们在计算它的时候才会调用:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26429.html

实例

f <- function(x) {
10
}
f()

执行以上代码,输出结果为:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26429.html

[1] 10

以上代码执行,并没有报错,虽然我们没有传入参数,但函数体内没有使用参数 x,所以不会去调用它,也不会报错。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26429.html

实例

new.function <- function(a, b) {
print(a^2)
print(a)
print(b)  # 使用到 b,但未传入,所以会报错
}文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26429.html

# 传入一个参数
new.function(6)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26429.html

执行以上代码,输出结果为:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26429.html

[1] 36
[1] 6
Error in print(b) : 缺少参数"b",也没有缺省值
Calls: new.function -> print
停止执行
文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26429.html
  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/ymba/26429.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定