R 函数
函数是一组一起执行一个任务的语句。R 语言本身提供了很多的内置函数,当然我们也可以自己创建函数。
您可以把代码划分到不同的函数中。如何划分代码到不同的函数中是由您来决定的,但在逻辑上,划分通常是根据每个函数执行一个特定的任务来进行的。
函数 声明 告诉编译器函数的名称、返回类型和参数。函数 定义 提供了函数的实际主体。
R 语言中函数是一个对象,可以拥有属性。
定义函数
函数定义通常由以下几个部分组成:
- 函数名: 为函数指定一个唯一的名称,以便在调用时使用。
- 参数: 定义函数接受的输入值。参数是可选的,可以有多个。
- 函数体: 包含实际执行的代码块,用大括号 {} 括起来。
-
返回值:
指定函数的输出结果,使用关键字
return
。
R 语言中的函数定义使用 function 关键字,一般形式如下:
function_name <- function(arg_1, arg_2, ...) { # 函数体 # 执行的代码块 return(output) }
说明:
- function_name : 为函数名
- arg_1, arg_2, ... : 形式参数列表
函数返回值使用 return() 。
以下是一个简单的例子,展示如何定义和使用函数:
实例
add_numbers <- function ( x, y ) {
result <- x + y
return ( result )
}
# 调用函数
sum_result <- add_numbers ( 3 , 4 )
print ( sum_result ) # 输出 7
以上代码中,我们定义了一个名为 add_numbers 的函数,它接受两个参数 x 和 y 。函数体中的代码将这两个参数相加,并将结果存储在变量 result 中。最后,使用 return 关键字返回结果。
要调用函数,我们使用函数名后跟参数列表的形式,将参数的值传递给函数。在本例中,我们调用 add_numbers 函数,并传递参数 3 和 4。函数执行后,返回结果 7,我们将其存储在变量 sum_result 中,并打印输出。
自定义函数
我们可以自己创建函数,用于特定到功能,定义后可以向内置函数一样使用它们。
下面演示两如何自定义函数:
实例
new. function <- function ( a ) {
for ( i in 1 : a ) {
b <- i ^ 2
print ( b )
}
}
接下来我们可以调用函数:
实例
for ( i in 1 : a ) {
b <- i ^ 2
print ( b )
}
}
# 调用函数,并传递参数
new. function ( 6 )
执行以上代码,输出结果为:
[1] 1 [1] 4 [1] 9 [1] 16 [1] 25 [1] 36
我们也可以创建一个不带参数的函数:
实例
for ( i in 1 : 5 ) {
print ( i ^ 2 )
}
}
# 调用函数,不需要传递参数
new. function ( )
执行以上代码,输出结果为:
[1] 1 [1] 4 [1] 9 [1] 16 [1] 25
带有参数值的函数
函数参数,可以按函数创建时的顺序来传递,也可以不按顺序,但需要指定参数名:
实例
new. function <- function ( a,b, c ) {
result <- a * b + c
print ( result )
}
# 不带参数名
new. function ( 5 , 3 , 11 )
# 带参数名
new. function ( a = 11 , b = 5 , c = 3 )
执行以上代码,输出结果为:
[1] 26 [1] 58
函数创建时也可以为参数指定默认值,如果调用的时候不传递参数就会使用默认值:
实例
new. function <- function ( a = 3 , b = 6 ) {
result <- a * b
print ( result )
}
# 调用函数,但不传递参数,会使用默认的
new. function ( )
# 调用函数,传递参数
new. function ( 9 , 5 )
执行以上代码,输出结果为:
[1] 18 [1] 45懒惰计算的函数
懒惰计算将推迟计算工作直到系统需要这些计算的结果。如果不需要结果,将不用进行计算。
默认情况下,R 函数对参数的计算是懒惰的,就是只有我们在计算它的时候才会调用:
实例
10
}
f ( )
执行以上代码,输出结果为:
[1] 10
以上代码执行,并没有报错,虽然我们没有传入参数,但函数体内没有使用参数 x,所以不会去调用它,也不会报错。
实例
print ( a ^ 2 )
print ( a )
print ( b ) # 使用到 b,但未传入,所以会报错
}
# 传入一个参数
new. function ( 6 )
执行以上代码,输出结果为:
[1] 36 [1] 6 Error in print(b) : 缺少参数"b",也没有缺省值 Calls: new.function -> print 停止执行
内置函数
R 语言提供了很多有用的内置函数,我们无需定义它就可以直接使用。
例如:seq(), mean(), max(), sum(x) 以及 paste(...) 等。
实例
print ( seq ( 32 , 44 ) )
# 计算两个数的平均数
print ( mean ( 25 : 82 ) )
# 计算 41 到 68 所有数字之和
print ( sum ( 41 : 68 ) )
执行以上代码,输出结果为:
[1] 32 33 34 35 36 37 38 39 40 41 42 43 44 [1] 53.5 [1] 1526
sum() : 计算向量或矩阵的总和。
实例
x <- c ( 1 , 2 , 3 , 4 , 5 )
total <- sum ( x )
print ( total ) # 输出 15
# 矩阵求和
matrix <- matrix ( 1 : 9 , nrow = 3 )
total <- sum ( matrix )
print ( total ) # 输出 45
mean(): 计算向量或矩阵的平均值。
实例
x <- c ( 1 , 2 , 3 , 4 , 5 )
avg <- mean ( x )
print ( avg ) # 输出 3
# 矩阵平均值
matrix <- matrix ( 1 : 9 , nrow = 3 )
avg <- mean ( matrix )
print ( avg ) # 输出 5
paste(): 将多个字符串连接成一个字符串。
实例
y <- "World"
result <- paste ( x, y )
print ( result ) # 输出 "Hello World"
length(): 返回向量的长度或对象的元素个数。
实例
length_x <- length ( x )
print ( length_x ) # 输出 5
matrix <- matrix ( 1 : 9 , nrow = 3 )
length_matrix <- length ( matrix )
print ( length_matrix ) # 输出 9
str(): 显示对象的结构和内容摘要。
实例
str ( x )
# 输出:
# num [1:5] 1 2 3 4 5
matrix <- matrix ( 1 : 9 , nrow = 3 )
str ( matrix )
# 输出:
# int [1:3, 1:3] 1 2 3 4 5 6 7 8 9
以上只列举了一小部分的 R 语言函数实例,R 有大量的内置函数和扩展包提供的函数,可以满足各种数据处理、统计分析、绘图等需求,您可以查阅 R 语言的官方文档获得更详细的函数列表和使用说明。