R语言基础教程 | 函数

前面一直提到函数,但是并没有说R中的函数是什么,这一章就讲解函数。

一个函数是组合在一起以执行特定任务的一组语句。R具有大量内置函数,当然用户也可以创建自己的功能。

在R中,函数是一个对象,所以R解释器能够将控制传递给函数,以将参数传递函数完成操作。该函数又执行其任务并将控制权返回给解释器以及可存储在其他对象中的任何结果。

R语言的各种包或第三方包中提供了大量的函数帮助我们解决实际中的各种问题。有时,我们还需要自己编写函数来实现自己的实际需求。

一、函数定义

使用关键字function来创建一个R函数。R函数定义的基本语法如下:

function_name <- function(arg_1, arg_2, ...) {
   Function body 
}

函数组件函数中有许多不同的部分,它们是:

  1. 函数名称:这是函数的实际名称。它以R名称作为对象存储在R环境中。
  2. 参数:参数是一个占位符。调用函数时,将值传递给参数。参数是可选的; 也就是说,函数可能不包含参数。参数也可以有默认值。
  3. 函数体:函数体包含一组语句,用于定义函数的作用。
  4. 返回值:函数的返回值是要评估/计算的函数体中的最后一个表达式。

R具有许多内置函数,可以直接在程序中调用,而不必定义它们。我们还可以创建和使用自己创建的函数,称为用户定义函数。

二、内置函数

内置函数的简单示例有:seq(),mean(),max(),sum(x)和paste(...)等。它们可在用户编写的程序直接调用。

> num = c(1:100)
> numsum = sum(num)

> numsum
[1] 5050

三、用户自定义函数

我们可以在R中创建用户定义的函数。它们用于实现用户想要的功能,当创建了这些用户自定义函数后,就可以像内置函数那样使用。以下是如何创建和使用函数的示例:

#创建一个球阶乘的函数Factorial
Factorial = function(a) {
   if(a>0) {
    b = 1
    for(i in 1:a){
      b <- b*i
      }
     print(b) 
   }
   else {
     print("数据有误")
   }
}

调用函数
上面创建的函数Factorial,我们可以直接调用。

> Factorial(3)
[1] 6
> Factorial(4)
[1] 24
> Factorial(5)
[1] 120
> Factorial(0)
[1] "数据有误"

我们创建Factorial函数时,定义了参数a,这称为带参数函数,我们可以不定义参数,叫无参函数,比如我们只想执行打印某一语句:

printwebsite = function(){
  print("www.bioinfocloud.cn")
  print("微信公众号:bioinfo_cloud")
  }
# 直接调用就可以了
printwebsite()

上面代码运行结果为:

[1] "www.bioinfocloud.cn"
[1] "微信公众号:bioinfo_cloud"

四、return

学过其他编程语言的可能知道,函数返回值的问题,在R中,函数中也利用return返回值。

#创建一个球阶乘的函数Factorial
Factorial_v2 = function(a) {
   if(a>0) {
    b = 1
    for(i in 1:a){
      b <- b*i
      }
     return(b)
   }
   else {
     print("数据有误")
   }
}

继续看上面的案例,我们将print(b)改成return(b)是一样的,不同的是我们可以将结果直接赋值给另外一个变量。

> bio = Factorial_v2(12)
> bio
[1] 479001600

五、函数中的变量作用范围

我们将上面Factorial函数中的打印放在for循环中,再运行试试

#创建一个球阶乘的函数Factorial
Factorial_v3 = function(a) {
   if(a>0) {
    b = 1
    for(i in 1:a){
      b <- b*i
      print(b)
      }
     
   }
   else {
     print("数据有误")
   }
}
> Factorial_v3(5)
[1] 1
[1] 2
[1] 6
[1] 24
[1] 120
Factorial_v4 = function(a) {
   if(a>0) {
    b = 1
    for(i in 1:a){
      b <- b*i
      }
     
   }
   else {
     print("数据有误")
   }
    print(b)
}

将打印print(b)放在if语句外,发现结果是对的。

Factorial_v4(5)
[1] 120
Factorial_v5 = function(a) {
   if(a>0) {
    b = 1
    for(i in 1:a){
      b <- b*i
      }
     
   }
   else {
     print("数据有误")
   }
    print(b+1)
}

将print(b)改为print(b+1)好像不还是能调用。这在其他编程语言中是会报错的。

> Factorial_v5(5)
[1] 121

加入我们在函数外直接用b会怎样??

Factorial_v5 = function(a) {
   if(a>0) {
    b = 1
    for(i in 1:a){
      b <- b*i
      }
     
   }
   else {
     print("数据有误")
   }
    print(b+1)
}
print(b+1)

在函数为直接运行print(b+1)时会报错,也就是说函数内部定义的变量只在函数内有用。

> print(b+1)
Error in print(b + 1) : object 'b' not found

倘若函数外也定义了b这个变量,优先使用函数里面的b。

> b = 1314
> print(b)
[1] 1314
> Factorial_v5(6)
[1] 721

转自:https://mp.weixin.qq.com/s?__biz=MzA4NDAzODkzMA==&mid=2651263720&idx=1&sn=c6cb548182b86c148fd579dc0f1e0972&chksm=841ef695b3697f837a51f4eadd6e0411b838317d9c7c1d53915bf6694acb5d3c65d6f8307ec6&scene=21#wechat_redirect

你可能感兴趣的:(R语言基础教程 | 函数)