函数是一个组织在一起的一组以执行特定任务的语句。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. linux 常用命令,开发记住这些基本能够玩转linux

    系统信息 arch 显示机器的处理器架构(1) uname -m 显示机器的处理器架构(2) uname -r 显示正在使用的内核版本 dmidecode -q 显示硬件系统部件 - (SMBIOS ...

  2. Bootstrap模态框modal的高度和宽度设置

    (1)高度 将style=“height:900px”放在<div class = "modal-dialog">或者更外层上,整个模态框的高度不会发生变化 如下图所示 ...

  3. ajaxfileupload插件上传图片功能,用MVC和aspx做后台各写了一个案例

    HTML代码 和js 代码 @{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name=&quo ...

  4. VisualStudio2017 远程 调试 IIS 服务器 web网站

    小伙伴们,本次测试好好的程序发布到服务器挂到IIS后我勒个*,,, 神马情况,为啥和我本地运行结果不一致,Fuc*... 没遇到的小伙伴估计也看不到此篇文章了吧,Log日志调试,嗯 不错,good i ...

  5. iOS Mac忘记登录密码的4种解决方法

    4种方法: 一.使用Apple ID重置用户账户密码 使用这个方法有一个前提 如上图红框,此项必须勾选,否则无法使用Apple ID重置密码.(如果你不记得有没有勾选,则你起码要记得首次启动 OS X ...

  6. python--变量,常量,用户交互

    1.变量 概念:把程序运行过程中产生的中间值保存在内存,方便后面使用 命名规范: 1.字母,数字,下划线组成 2.不能用数字开头,且不能用纯数字 3.不能用python关键字 4.不要用中文 5.要有 ...

  7. docker的介绍以及常用命令

    一.docker的介绍 1. Docker是什么? Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚 ...

  8. LOJ#2039. 「SHOI2015」激光发生器(计算几何)

    题面 传送门 题解 如果我初中科学老师知道我有一天计算的时候入射角不等于反射角不知道会不会把我抓起来打一顿-- 这题本质上就是个模拟,需要的芝士也就计蒜几盒的那点,不过注意细节很多,放到考场上只能看看 ...

  9. Redis-Java 交互的应用

    一.首先介绍一下Redis Redis是目前业界使用最广泛的内存数据存储.相比memcached,Redis支持更丰富的数据结构,例如hashes, lists, sets等,同时支持数据持久化.除此 ...

  10. 把 Reative Native 47 版本集成到已有的 Native iOS 工程中

    一.搭建开发环境 http://reactnative.cn/docs/0.46/getting-started.html#content 二.创建一个模板 运行以下命令,创建一个最新版本的 reac ...