R 编程中的函数


2022年4月9日, Learn eTutorial
2535

函数在 R 编程语言中的概念与其他编程语言(如 C、C++、Java、PYTHON 等)中的概念相似。在本教程中,您将学习函数在 R 中的作用、如何使用它来构建简单高效的程序,以及执行逻辑的不同函数类型。

R 中的函数是什么?

函数是一组可重用的代码,用于执行逻辑。在 R 编程语言中,函数被视为一个 R 对象。

当程序开始执行时,解释器会将控制流传递给函数,并提供执行代码所需的参数。函数成功执行后,控制权会交还给解释器。

add function img

R 中函数的需求

当需要对不同输入应用相同的代码时,就会使用函数。R 中的函数是一组应用于这些 R 对象的指令。函数通过避免代码重复来节省程序员的时间。换句话说,使用函数可以避免一次又一次地编写相同的代码。在使用函数时,只有输入会变化,而功能或代码保持不变。

types of fn img

R 编程中引入了两种类型的函数。它们是

  1. 内置函数
  2. 用户定义函数

如何在 R 中创建函数?

函数是为了相似逻辑而执行的一组指令,但它们的输入不同,从而产生各种输出。函数可以多次用于生成具有不同输入的输出,从而通过消除或在程序中重复编写相同的代码来节省用户时间。每当需要频繁执行一组操作时,只需调用预定义的函数即可使其简单易行。

在 R 编程中,函数是使用一个名为 function 的内置保留字创建的。

在 R 中创建函数

语法


Function_name = function(arguments){
        #body_of_function
        ……..
        return(return)
}

其中

  • function_name 是为函数命名的名称,也是调用函数时使用的名称,它作为对象存储在 R 环境中。
  • function() 是用于创建一组可重用代码的保留字和内置函数。
  • arguments 是函数的输入,如 arg1、arg2 等。它们是可选的,可以包含函数,也可以不包含。参数是在调用函数时传递的值。
  • body_of_function 调用 function() 时要执行的一组指令。
  • return() 是另一个内置函数,用于在函数执行后返回(输出)值。

“function”是定义 R 中函数()的保留字。function() 接收作为参数的输入值,并开始执行函数体以完成特定任务,然后使用 return() 函数返回最终结果。function() 被赋值给一个名为 function_name 的变量,该变量在程序中的任何位置被调用时都会执行 function()。

让我们通过一个简单的 R 程序来理解函数概念,该程序用于将两个数字相加


#To create a function named add
add <- function(x, y){       #function()
  # function to add x and y
  sum <- x+y                 #function body
  return(sum)                #return()
  }

add(4,5)    #function(4,5),sum <- 4+5,return(9)
            #outputs 9

名为“add”的 function_name 接收输入值作为参数 arg1=4、arg2=5,例如 add(4,5) 调用名为 add 的函数,并将参数传递给 function(),函数体中的指令集开始执行以评估结果。在我们的示例中,add(4,5) 调用 function() 来执行这两个数字的加法 (sum<-4+5) 并存储在另一个名为 sum 的变量中,然后 return() 函数返回总和作为输出,等于 9,并在控制台中输出,如下所示


> add(4,5)
[1] 9

如果使用另一组参数作为输入调用名为 sum 的相同 function(),则会执行相同的过程并输出结果。例如,如果您调用函数 add(234,56),它会产生 290 的结果。


> add(234,56)    #function(234,56),sum<-234+56,return(290)
[1] 290

这里展示了 R 中函数的需求或重要性。如果我们编写了一组预定义的代码,我们就可以在程序中根据我们的输入需求多次使用它。这使得编码变得容易,并节省了程序员所需的时间。

查看 RStudio 中带有多个 add() 函数的截图。

add fn screeshot

让我们尝试使用函数执行相同的加法操作,但不使用 return() 函数

创建不带 return() 函数的函数的程序


add <- function(x, y) {
  # function to add x and y
  sum <- x+y
  print(paste(x,"+",y, "=",sum))
}

add(4,5)

上述代码也生成了与我们之前示例相同的输出。唯一的区别是缺少 return() 函数,而是提供了 print 语句来显示结果。

执行此代码块后的结果是


[1] "4 + 5 = 9"

我们可以推断,return 语句是构成函数的一个组件,它是可选的,其他一些组件也是如此。

注意

  • 函数名、function()、参数、body_of_function、return() 构成了函数中的组件。
  • 函数可能包含或不包含这些组件,其中一些是可选的。
  • 该语法类似于 R 中的用户定义函数。

 

R 中函数的主要组成部分是什么?

R 中函数的主要组成部分或部分可概括为三个部分。它们是

  1. 函数体:body()
  2. 形式参数:formals()
  3. 环境:environment()
add function img

这些是 R 程序中的函数组成的组件,可以使用 R 程序中定义的某些内置函数进行识别。

  • body():括号 () 内带有函数名的 body() 函数允许识别函数内部包含的一组指令。

    示例

    
    > body(add)
    {
        sum <- x + y
        print(paste(x, "+", y, "=", sum))
    }
    
    
  • formals():括号 () 内带有函数名的 formals() 函数标识了调用函数时传递给函数的参数列表。

    示例

    
    > formals(add)
    $x
    $y
    
    
  • environment():environment() 函数检索函数的变量性质。

    示例

    
    > environment(add)
    < environment: R_GlobalEnv >
    
    
add function img
R 函数的组件 检查组件的函数 描述
函数体   body() 函数内部要执行的指令集合定义了函数体
形式参数  formals() 形式参数定义了调用函数时传递的参数列表,例如 arg1、arg2、arg3 等。
环境   environment() 环境定义了函数变量存储为 R 对象的位置。

如何将函数应用于 R 对象?

R 中的对象是 R 程序中具有不同属性和结构的数据。

考虑创建一个名为 my_age 的 R 对象,它通过使用 R 中的任何赋值运算符(=, <-, ->)赋给一些值。当您在 RStudio 中运行代码时,您会看到变量 my_age 作为对象存储在全局环境中。

obj creation snippet

现在考虑另一个对象 age,它被赋值为 4。让我们看看如何将函数应用于我们创建的对象。假设您需要对您创建的对象或变量(my_age, age)执行加法。通过在 R 中添加 sum() 函数即可实现。

使用 sum() 函数执行加法,并将参数传递到 sum() 函数中。


>  #use function sum()
> sum(my_age,age)
[1] 16

使用 sum 函数后,您将获得变量中存储的值相加后的输出。