创建函数
在本节课中,我们将学习函数的概念以及如何在R语言中创建函数。
什么是函数?
函数是一组语句,它们一起执行以实现特定的目标或任务。
你可能记得,在 R 中一切都是对象。由此可以得出结论:函数在 R 语言中也是一个对象。
函数的语法
在 R 中,函数通过关键字 function 创建。基本语法如下:
1functionName <- function(argument1, argument2, ..., argumentN) 2{ 3 # 语句 4}
让我们来看一个示意图:

函数的组成部分
functionName:这是函数的实际名称,并作为 R 中的一个对象存储。
参数(arguments):我们可以向函数传递数据。这些类似于函数的输入。不过,参数是可选的;也就是说,函数可以不包含任何参数。此外,参数可以设置默认值。默认值是指当调用函数时未为该参数指定值时所采用的值。
语句(Statements):这些构成了函数的主体,定义了函数实际执行的操作。
输出(Output):这是函数的返回值。
函数的类型
R 语言中有两种类型的函数。

内置 R 函数
你可能已经注意到,我们一直在使用一些内置函数,如 print()、cat()、length() 等。这些函数是预先定义好的,供程序员使用,由用户编写的程序调用。我们只需传入这些函数所需的参数即可。
有趣的是,我们也可以自己创建函数,并按需调用。这样,就可以重复使用那些经常需要的代码块。
用户自定义 R 函数
假设你想找出两个数中的最大值:
1myNumber1 <- 2 2myNumber2 <- 5 3if(myNumber1 > myNumber2) 4{ 5 print(myNumber1) 6} else 7{ 8 print(myNumber2) 9}
上述代码只是定义了两个数字,并使用 if...else 条件语句来显示较大的那个数。但如果想对另一组数字再次执行相同操作,即两次完成找最大值的任务:
1myNumber1 <- 2 2myNumber2 <- 5 3if(myNumber1 > myNumber2) 4{ 5 print(myNumber1) 6} else 7{ 8 print(myNumber2) 9} 10 11myNumber3 <- 7 12myNumber4 <- 5 13if(myNumber3 > myNumber4) 14{ 15 print(myNumber3) 16} else 17{ 18 print(myNumber4) 19}
如你所见,相同的代码被复制了两次(第 3 到 5 行和第 13 到 19 行),只是作用于不同的输入数据,执行的是相同的操作。
类似地,我们可能在代码的不同位置多次需要找出两个数的最大值。反复复制粘贴同样的代码既繁琐,也增加了出错的可能性。
然而,我们可以为此任务创建一个 function。将用于查找两个数最大值的 if-else 代码封装起来,这两个数将成为函数的输入,也就是执行操作的_参数_。
让我们看看具体的代码实现:
1maxNumber <- function(myNumber1, myNumber2) { # 实现一个函数 2 # 函数体 3 if(myNumber1 > myNumber2) 4 { 5 print(myNumber1) 6 } else 7 { 8 print(myNumber2) 9 } 10} # 结束函数 11 12# 调用函数 13m <- 2 14n <- 5 15maxNumber(m, n) # 调用 maxNumber() 函数 16 17# 现在我们可以随时多次调用这个函数 18m <- 7 19n <- 5 20maxNumber(m, n) 21 22m <- 11 23n <- 90 24maxNumber(m, n)