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

在R语言中的函数是一个对象,所以R语言解释器为能够通过控制到该函数,带有参数可能是函数必要完成的操作。

反过来函数执行其任务,并将控制返回到其可以被存储在其它的目的解释器以及任何结果。

函数定义

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

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

函数组件

函数的不同部分是:

  • 函数名称: 这是函数的实际名称。它被存入R环境作为一个对象使用此名称。
  • 参数:  参数是一个占位符。当调用一个函数,传递一个值到参数。参数是可选的; 也就是说,一个函数可以含有任何参数。此外参数可以有默认值。
  • 函数体: 函数体包含定义函数是使用来做什么的语句集合。
  • 返回值: 一个函数的返回值是在函数体中评估计算最后一个表达式的值。

示例

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

内置函数

内建函数的简单例子如:seq(), mean(), max(), sum(x) 和 paste(...) 等等. 它们被直接由用户编写的程序调用。可以参考最广泛用 在R编程里面的函数。

# Create a sequence of numbers from 32 to 44.
print(seq(32,44)) # Find mean of numbers from 25 to 82.
print(mean(25:82)) # Find sum of numbers frm 41 to 68.
print(sum(41:68))

当我们上面的代码执行时,它产生以下结果:

[1] 32 33 34 35 36 37 38 39 40 41 42 43 44
[1] 53.5
[1] 1526

用户定义函数

我们可以在R语言中创建用户定义的函数,它们是特定于用户想要实现什么功能,一旦创建了它们可以像内置函数一样使用。下面是函数如何创建和使用的一个例子。

# Create a function to print squares of numbers in sequence.
new.function <- function(a) {
for(i in 1:a) {
b <- i^2
print(b)
}
}

调用函数

# Create a function to print squares of numbers in sequence.
new.function <- function(a) {
for(i in 1:a) {
b <- i^2
print(b)
}
} # Call the function new.function supplying 6 as an argument.
new.function(6)

当我们上面的代码执行时,它产生以下结果:

[1] 1
[1] 4
[1] 9
[1] 16
[1] 25
[1] 36

调用函数不带参数

# Create a function without an argument.
new.function <- function() {
for(i in 1:5) {
print(i^2)
}
} # Call the function without supplying an argument.
new.function()

当我们上面的代码执行时,它产生以下结果:

[1] 1
[1] 4
[1] 9
[1] 16
[1] 25

调用函数带有参数值(按位置和名称)

参数在传到函数调用可以以相同的顺序如提供在函数定义的顺序一样,或者它们可以以不同的顺序提供(按参数名称)。

# Create a function with arguments.
new.function <- function(a,b,c) {
result <- a*b+c
print(result)
} # Call the function by position of arguments.
new.function(5,3,11) # Call the function by names of the arguments.
new.function(a=11,b=5,c=3)

当我们上面的代码执行时,它产生以下结果:

[1] 26
[1] 58

带有调用默认参数的函数

我们可以在函数定义中定义的参数的值并调用该函数,而不提供任何参数来获取默认参数的结果。但是,我们也可以通过提供参数的新值调用来这些函数,并得到非默认的结果。

# Create a function with arguments.
new.function <- function(a = 3,b =6) {
result <- a*b
print(result)
} # Call the function without giving any argument.
new.function() # Call the function with giving new values of the argument.
new.function(9,5)

当我们上面的代码执行时,它产生以下结果:

[1] 18
[1] 45

函数延迟计算

函数的参数在延迟方式计算,这意味着只有在需要函数体时,它们才会进行评估计算。

# Create a function with arguments.
new.function <- function(a, b) {
print(a^2)
print(a)
print(b)
} # Evaluate the function without supplying one of the arguments.
new.function(6)

当我们上面的代码执行时,它产生以下结果:

[1] 36
[1] 6
Error in print(b) : argument "b" is missing, with no default

R语言函数的更多相关文章

  1. R语言函数化学习笔记6

    R语言函数化学习笔记 1.apply函数 可以让list或者vector的元素依次执行一遍调用的函数,输出的结果是list格式 2.sapply函数 原理和list一样,但是输出的结果是一个向量的形式 ...

  2. R语言函数化学习笔记3

    R语言函数化学习笔记3 R语言常用的一些命令函数 1.getwd()查看当前R的工作目录 2.setwd()修改当前工作目录 3.str()可以输出指定对象的结构(类型,位置等),同理还有class( ...

  3. R语言函数化编程笔记2

    R语言函数化编程笔记2 我学过很多的编程语言,可以我写的代码很啰嗦,一定是我太懒了.或许是基础不牢地动山摇 1.为什么要学函数 函数可以简化编程语言,减少重复代码或者说面向对象的作用 2.函数 2.1 ...

  4. R语言函数化编程笔记1

    R语言函数化编程笔记1 notes:有一个不错的网站叫做stack overflow,有问题可以从上面找或者搜索答案,会有大佬相助. 在github上面可以找到很多R的扩展包,如果自己额修改被接受,那 ...

  5. R语言︱函数使用技巧(循环、if族/for、switch、repeat、ifelse、stopifnot)

    每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 后续加更内容: 应用一:if族有哪些成员呢?- ...

  6. R语言函数总结(转)

    R语言特征 对大小写敏感 通常,数字,字母,. 和 _都是允许的(在一些国家还包括重音字母).不过,一个命名必须以 . 或者字母开头,并且如果以 . 开头,第二个字符不允许是数字. 基本命令要么是表达 ...

  7. r语言 函数

    R语言实际上是函数的集合,用户可以使用base,stats等包中的基本函数,也可以自己编写函数完成一定的功能.但是初学者往往认为编写R函数十分困难,或者难以理解.这里对如何编写R函数进行简要的介绍. ...

  8. 【R笔记】R语言函数总结

    R语言与数据挖掘:公式:数据:方法 R语言特征 对大小写敏感 通常,数字,字母,. 和 _都是允许的(在一些国家还包括重音字母).不过,一个命名必须以 . 或者字母开头,并且如果以 . 开头,第二个字 ...

  9. 【转】R语言函数总结

    原博: R语言与数据挖掘:公式:数据:方法 R语言特征 对大小写敏感 通常,数字,字母,. 和 _都是允许的(在一些国家还包括重音字母).不过,一个命名必须以 . 或者字母开头,并且如果以 . 开头, ...

随机推荐

  1. .NET框架源码解读之MYC编译器

    在SSCLI里附带了两个示例编译器源码,用来演示CLR整个架构的弹性,一个是简化版的lisp编译器,一个是简化版的C编译器.lisp在国内用的少,因此这里我们主要看看C编译器的源码,源码位置是:\ss ...

  2. WPF 使用QRCoder生成二维码

    vs中使用Nuget获取QRCoder 窗体中添加按钮和Iage <Window x:Class="QRCoderTest.MainWindow" xmlns="h ...

  3. uwp获取版本信息win10 VersionInfo

    using Windows.System.Profile; Después vamos a agregar una propiedad que va a contener un mensaje con ...

  4. Wireshark系列(从入门到精通的10个干货)

    Wireshark(前称Ethereal)是一个网络封包分析软件.网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料.Wireshark使用WinPCAP作为接口,直接与网卡进 ...

  5. javascript简要笔记

      零. 数据   0. 变量 分为字符串,数字,undefined, null,对象 undefined类型是只声明了变量,但是没赋值 可以使用typeof()函数来查看变量类型   例子1 var ...

  6. JDK8的安装及环境配置

    原文链接:https://www.cnblogs.com/chenxj/p/10137221.html 1.下载JDK: a.直接官网下载:http://www.oracle.com/: b.或百度网 ...

  7. mysql数据库中常用操作汇总

    一.查询数据库的基本信息: 1.    /* 查询数据库 ‘boss’ 所有表及注释 */SELECT TABLE_NAME,TABLE_COMMENT FROM information_schema ...

  8. 我永远喜欢我的偶像 KIKU

  9. C#-语言基础+数据类型+运算符

    一.C#语言基础 新建项目:文件→新建→项目→Visual C#(默认.NET Framework 4.5)→控制台应用程序 1.项目结构 (1)项目后缀 .config ——配置文件(存放配置参数文 ...

  10. EDEM 2018 + Fluent 19.0耦合

    具体步骤参考流沙的文章即可,如果python版本较高,可能有个地方需要小小的改动一下: tools文件夹下的compile_lib_edem_coupling.py文件中,导入模块有个地方需要修改 其 ...