R 语言函数
函数是一段代码,只在被调用时运行。
可以将数据(称为参数)传递到函数中。
函数可以作为结果返回数据。
创建函数
function()
关键字创建函数:
实例
my_function <- function() { # create a function with the name my_function
print("Hello World!")
}
调用函数
要调用函数,请使用函数名后跟括号,如 my_function():
实例
my_function <- function() {
print("Hello World!")
}
my_function()
Arguments 参数
信息可以作为 arguments 参数传递到函数中。
arguments 参数在函数名后的括号内指定。可以添加任意数量的参数,只需用逗号分隔即可。
下面的实例有一个带有一个 arguments 参数(fname)的函数。调用函数时,我们传递一个名字,该名字在函数内部用于打印全名:
实例
my_function <- function(fname) {
paste(fname, "Griffin")
}
my_function("Peter")
my_function("Lois")
my_function("Stewie")
Parameters 还是 Arguments?
术语 "parameter" 和 "argument" 都是参数,可以用于同一件事:传递到函数中的信息。
从函数的角度:
parameter 参数是函数定义中括号内列出的变量。
argument 参数是调用函数时发送给函数的值。
Arguments 的数量
默认情况下,必须使用正确数量的参数调用函数。这意味着如果你的函数需要两个参数,你必须用两个参数调用函数,不能多,也不能少:
实例
此函数需要两个 arguments 参数,并用两个 arguments 参数调用:
my_function <- function(fname, lname) {
paste(fname, lname)
}
my_function("Peter", "Griffin")
如果你试图用 1 或 3 个参数调用函数,这样就会产生错误:
实例
此函数需要 2 个参数,但只使用 1 个参数:
my_function <- function(fname, lname) {
paste(fname, lname)
}
my_function("Peter")
默认 Parameter 参数值
下面的实例演示如何使用默认 parameter 参数值。
如果我们在没有 argument 参数的情况下调用函数,它将使用默认值:
实例
my_function <- function(country = "Norway") {
paste("I am from", country)
}
my_function("Sweden")
my_function("India")
my_function() # will get the default value, which is Norway
my_function("USA")
返回值
要让函数返回结果,请使用 return()
函数:
实例
my_function <- function(x) {
return (5 * x)
}
print(my_function(3))
print(my_function(5))
print(my_function(9))
以上代码输出结果是:
[1] 15
[1] 25
[1] 45
嵌套函数
创建嵌套函数有两种方法:
- 在另一个函数中调用一个函数。
- 在函数中编写函数。
实例
在另一个函数中调用函数:
Nested_function <- function(x, y) {
a <- x + y
return(a)
}
Nested_function(Nested_function(2, 2), Nested_function(3, 3))
实例解释
该函数告诉 x 加 y。
第一个输入嵌套_函数(2,2)是主函数的 "x"。
第二个输入嵌套_函数(3,3)是主函数的 "y"。
因此,输出为(2+2)+(3+3)= 10。
实例
在函数中编写函数:
Outer_func <- function(x) {
Inner_func <- function(y) {
a <- x + y
return(a)
}
return (Inner_func)
}
output <- Outer_func(3) # To call the Outer_func
output(5)
实例解释
无法直接调用该函数,因为 Inner_func 已在 Outer_func 中定义(嵌套)。
我们需要先调用 Outer_func,然后再调用 Inner_func。
我们需要创建一个名为 output 的新变量,并给它一个值,这里是 3。
然后,我们用所需的 "y" 值打印输出,在本例中为 5。
因此,输出为 8(3+5)。
递归
R 语言也接受函数递归,这意味着定义的函数可以调用自身。
递归是一个常见的数学和编程概念。这意味着一个函数调用自己。这样做的好处是,您可以通过循环数据来获得结果。
开发人员应该非常小心递归,因为它很容易编写一个永远不会终止的函数,或者一个使用过多内存或处理器能力的函数。然而,如果编写正确,递归会是一种非常有效且数学上优雅的编程方法。
在这个例子中, tri_recursion()
是一个我们定义的叫 ("递归") 的函数。我们使用变量 k
作为数据, 每次递归时该值自减 (-1
) 。当条件不大于 0 时(即当条件为 0 时),递归结束。
对于一个新手开发人员来说,可能需要一些时间来弄清楚递归到底是如何工作的,最好的办法是通过实践与测试。
实例
tri_recursion <- function(k) {
if (k > 0) {
result <- k + tri_recursion(k - 1)
print(result)
} else {
result = 0
return(result)
}
}
tri_recursion(6)