函数是一个组织在一起的一组以执行特定任务的语句。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. [Erlang35]Erlang18的time

    在Erlang 18中, 我们还是可以使用erlang:now/0 但也已经 deprecated啦,大量使用可能引发瓶颈. The default time warp mode has the sa ...

  2. 纸壳CMS列表Grid的配置

    纸壳CMS(ZKEACMS)里的Grid是一个TagHelper,是对jQuery插件datatables的一个配置封装. Easy.Mvc.TagHelpers.GridTagHelper grid ...

  3. 关于StreamReader.ReadToEnd方法

    以前写抓取网页的代码喜欢用ReadToEnd,因为简单省事,后来发现,在爬取网页的时候,如果网速很慢,ReadToEnd超时的几率很大.使用Read改写后,超时几率大大减小,完整代码如下: /// & ...

  4. Python(re模块,正则)

    day18 正则表达式用处? 匹配 字符串 s = 'hello world' print(s.find('llo'))#第一个的位置 ret = s.replace('ll','xx') print ...

  5. PHP消息队列实现

    一个经典的消息队列就是这样的,主要是入队出队操作. shell脚本日志输出 学习地址:http://www.imooc.com/article/19111

  6. 设置跨交换机VLAN

    4台计算机,pc1 pc2 连接到交换机1的f1/1和f1/2.Pc3 pc4 连接到交换机2的f1/1和f1/2.pc1设置ip地址192.168.1.10,pc2 pc3 pc4设置ip地址192 ...

  7. 理解 atime,ctime,mtime (下)

    话不多说,开始下篇. # 前言 通过 "理解 atime,ctime,mtime (上)" 我们已经知道了atime 是文件访问时间:ctime是文件权限改变时间:mtime是文件 ...

  8. C++基础知识-派生类、调用顺序、访问等级、函数遮蔽

    一.派生类的概念 类之间有一种层次关系,有父亲类,有孩子类. 车这个类,当成父类(也叫基类.超类),派生出卡车.轿车,他们属于孩子类(子类.派生类) 继承:有父亲类,有孩子类,构成了层次关系.继承这种 ...

  9. OpenCV识别技术

    OpenCV识别技术# 老师:james 20181019 # 识别技术# Pycharm + Python3 + OpenCV """ 一.识别技术: 什么是OpenC ...

  10. SpringMVC 的 切面

    官网路径:https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#beans 一:术语介绍 通知 ...