前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >R语言基础教程——第六章:函数

R语言基础教程——第六章:函数

作者头像
DoubleHelix
发布2019-08-07 15:02:18
8530
发布2019-08-07 15:02:18
举报
文章被收录于专栏:生物信息云生物信息云
前面一直提到函数,但是并没有说R中的函数是什么,这一章就讲解函数。

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

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

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

函数定义

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

代码语言:javascript
复制
function_name <- function(arg_1, arg_2, ...) {
   Function body 
}

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

函数名称 - 这是函数的实际名称。它以R名称作为对象存储在R环境中。

参数 - 参数是一个占位符。调用函数时,将值传递给参数。参数是可选的; 也就是说,函数可能不包含参数。参数也可以有默认值。

函数体 - 函数体包含一组语句,用于定义函数的作用。

返回值 - 函数的返回值是要评估/计算的函数体中的最后一个表达式。

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

内置函数

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

代码语言:javascript
复制
> print("www.bioinfocloud.cn")
[1] "www.bioinfocloud.cn"
> num = c(1:100)
> numsum = sum(num)
> numsum
[1] 5050

用户自定义函数

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

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

调用函数

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

代码语言:javascript
复制
> Factorial(3)
[1] 6
> Factorial(4)
[1] 24
> Factorial(5)
[1] 120
> Factorial(0)
[1] "数据有误"

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

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

上面代码运行结果为:

代码语言:javascript
复制
[1] "www.bioinfocloud.cn"
[1] "微信公众号:bioinfo_cloud"

return

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

代码语言:javascript
复制
#创建一个球阶乘的函数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)是一样的,不同的是我们可以将结果直接赋值给另外一个变量。

代码语言:javascript
复制
> bio = Factorial_v2(12)
> bio
[1] 479001600

函数中的变量作用范围

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

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

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

代码语言:javascript
复制
Factorial_v4(5)
[1] 120
代码语言:javascript
复制
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)好像不还是能调用。这在其他编程语言中是会报错的。

代码语言:javascript
复制
> Factorial_v5(5)
[1] 121

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

代码语言:javascript
复制
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)时会报错,也就是说函数内部定义的变量只在函数内有用。

代码语言:javascript
复制
> print(b+1)
Error in print(b + 1) : object 'b' not found

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

代码语言:javascript
复制
> b = 1314
> print(b)
[1] 1314
> Factorial_v5(6)
[1] 721
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 MedBioInfoCloud 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 函数定义
  • 内置函数
  • 用户自定义函数
  • return
  • 函数中的变量作用范围
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档