Your first R function

命令一个函数时,一般不写在交互式命令行里,而是写在一个空白的文本文件中,即把函数放在一个R包中,这里面包含着文档(documentation),是一个更加结构化的环境。

我们使用的软件是RStudio,左上角新建一个新的R脚本来写代码。

Example 1

举个例子,简单了解一下如何使用函数的语法、如何指定参数以及如何返回结果:

命令一个简单的函数,求x, y的和。

## 给函数赋值为add2,第一行小括号里写进变量,第二行大括号里写入运算
add2 <- function(x, y) {x + y
}
## 因为R函数会返回最后一个表达式的值,所以不用写返回

在控制台(console)运行脚本,赋值后即可得到结果:

> add2 <- function(x, y) {+   x + y
+ }
> add2(7, 5)
[1] 12

Example 2

下一个例子稍微复杂一点:

我们要输入一个数字向量,然后返回这个向量的子集(返回其中大于10的数字)

above10 <- function(x){   ##  命名变量use <- x > 10         ##  逻辑语句,来判断变量x是否大于10x[use]                ##  取子集
}

运行:

> above10 <- function(x){+   use <- x > 10
+   x[use]
+ }
> x <- 1:16
> above10(x)
[1] 11 12 13 14 15 16
> above10(1:9)
integer(0)

如果我们不设置10,而是改成任意数字n,以上命令可改写为:

above <- function(x, n){use <- x > n x[use]
}

运行:

> above <- function(x, n){+   use <- x > n
+   x[use]
+ }
> x <- 1:16
> above(x, 12)
[1] 13 14 15 16 

设置“缺省值”(可以理解为默认值),即如果在函数运行过程中不指定n的值时,系统自动筛选的标准:

above <- function(x, n = 10){   ## 设置缺省值为10use <- x > n x[use]
}

这时当你运行函数时:

> above <- function(x, n = 10){+   use <- x > n
+   x[use]
+ }
> above(x)     ## 自动筛选数字向量中大于10的数字[1] 11 12 13 14 15 16

Example 3

下面这个例子再复杂一点,我们要给函数一个参数,然后使用循环遍历这个函数的每一列:

比如,取一个矩阵,然后计算每列的平均值:

columnmean <- function(x){   ## 给函数命名,设置参数x,用于储存矩阵nc <- ncol(x)              ## 计算矩阵中有多少列means <- numeric(nc)       ## 设置数值向量储存列数,长度等于列数,它是一个空向量,每个元素的初始值为0,数值在循环中填满。for (i in 1:nc){           ## 设置循环,循环参数在整数向量1到列数之间means[i] <- mean(x[,i])  ## 把每一列的平均值赋予means[i],x[,i]是矩阵取子集,即求每列的平均值}means                 ## 返回means,平均值向量
}

运行这个程序,计算airquality数据集每列的平均值:

ps.airquality数据集有6列,前六行长这样:

> head(airquality)Ozone Solar.R Wind Temp Month Day
1    41     190  7.4   67     5   1
2    36     118  8.0   72     5   2
3    12     149 12.6   74     5   3
4    18     313 11.5   62     5   4
5    NA      NA 14.3   56     5   5
6    28      NA 14.9   66     5   6

运行脚本可以看到函数columnmean(airquality)返回了6个平均值:

> columnmean <- function(x){
+   nc <- ncol(x)
+   means <- numeric(nc)
+   for (i in 1:nc){+     means[i] <- mean(x[,i])
+   }
+   means
+ }
> columnmean(airquality)
[1]        NA        NA  9.957516 77.882353  6.993464 15.803922

可以看到,如果某列有缺失值NA的话,计算得出的数值就直接是NA。

所以我们可以添加一个逻辑参数,设置移除缺失值:

columnmean <- function(x, removeNA = TRUE){   ## 添加参数,并设置缺省值为TRUEnc <- ncol(x)means <- numeric(nc)for (i in 1:nc){means[i] <- mean(x[,i], na.rm = removeNA)   ## 在mean()函数中添加参数}means
}

再次运行程序,可以看到计算结果是默认移除NA后求得的平均值:

> columnmean(airquality)
[1]  42.129310 185.931507   9.957516  77.882353   6.993464  15.803922

参考资料:
1. 视频课程
R Programming by Johns Hopkins University:https://www.coursera.org/learn/r-programming/home/welcome
2. 讲义
Programming for Data Science :https://bookdown.org/rdpeng/rprogdatascience/R

R语言笔记6:在R中写一些简单的函数相关推荐

  1. R语言笔记6:在R中写一些简单的函数、functions基础和作用域

    R语言基础系列: 1数据类型(向量.数组.矩阵. 列表和数据框) 2读写数据所需的主要函数.与外部环境交互 3数据筛选--提取对象的子集 4向量.矩阵的数学运算 5控制结构 Your first R ...

  2. R语言笔记2:读写数据所需的主要函数、与外部环境交互

    R语言基础系列前情提要: - 1数据类型(向量.数组.矩阵. 列表和数据框) Getting Data In and Out of R (一)读取数据 读取数据所需的几种函数: read.table. ...

  3. R语言笔记一:R软件的下载、界面简介、帮助文档

    如何使用R软件求解统计问题? 一.R软件简介 R是一个有着统计分析功能及强大作图功能的软件系统.R既是一种软件也可以说是一种语言. R软件是完全免费的,我们可以通过R软件网站(https://www. ...

  4. R语言笔记1:t检验和Wilcoxon检验

    转自新浪博客,转载地址:http://blog.sina.com.cn/s/blog_427c24ae0102wg7n.html 1.t检验 数据是高血压患者治疗前后舒张压的变化,这个内容最熟悉不过了 ...

  5. R语言笔记——”org.Hs.eg.db“脱坑记录

    R语言笔记--"org.Hs.eg.db"脱坑记录 "org.Hs.eg.db"是发布在bioconductor平台上面的一个数据库文件,该包中装有较多的主流数 ...

  6. R语言计算资本资产定价模型(CAPM)中的Beta值和可视化

    原文链接:http://tecdat.cn/?p=22588 今天我们将计算投资组合收益的CAPM贝塔.这需要拟合一个线性模型,得到可视化,从资产收益的角度考虑我们的结果的意义. 简单的背景介绍,资本 ...

  7. R语言在气象、水文中数据处理及结果分析、绘图

    R语言是一门由统计学家开发的用于统计计算和作图的语言(a Statistic Language developed for Statistic by Statistician),由S语言发展而来,以统 ...

  8. R语言ggplot2可视化:ggplot2中使用element_text函数设置轴标签文本粗体字体(bold text,只设置x轴的标签文本使用粗体字体)

    R语言ggplot2可视化:ggplot2中使用element_text函数设置轴标签文本粗体字体(bold text,只设置x轴的标签文本使用粗体字体) 目录

  9. R语言ggplot2在可视化图像中添加横线并在横线中添加文本、为横线中添加的文本添加文本框、自定义文本框的填充色(background color for a text annotation)

    R语言ggplot2在可视化图像中添加横线并在横线中添加文本.为横线中添加的文本添加文本框.自定义文本框的填充色(background color for a text annotation) 目录

最新文章

  1. tensorflow.transpose() 举例
  2. python的excel库_Python-excel相关库
  3. 洛谷P1373 小a和uim之大逃离
  4. 跟我一起写 Makefile(十)
  5. 如何使用C语言的面向对象?
  6. css样式中如何设置中文字体?
  7. apache伪静态综述
  8. WinSocket的一些主要函数.
  9. 手机距离传感器坏了有什么影响_恢复出厂设置对手机有什么影响?
  10. 数据分析工具具备什么功能
  11. windows10(专业版和家庭版)---禁止自动更新系统
  12. spring教程笔记4
  13. 唯有自己变得强大_强大自己!(经典)
  14. 一个前端写的php博客系统--支持markdown哦
  15. 基于人脸特征点实现疲劳检测
  16. 差分GPS(differential GPS-DGPS,DGPS)
  17. 【细胞分割】基于中值滤波+分水岭法实现细胞计数matlab源码
  18. async、await其实是generator和promise的语法糖
  19. 海洋CMS采集-内置接口的海洋CMS采集
  20. 阿里云ECS安装MySql数据库

热门文章

  1. node.js生成条形码图片
  2. 机器视觉(六)——像素坐标系、图像坐标系、相机坐标系以及世界坐标系
  3. Altium Designer系列:元件英文翻译
  4. 【TTS】uni-app语音播报app开发 / MT-TTS安卓原生自带语音合成插件(免费无限次)
  5. dapp 是什么?dapp 和 app 有什么区别?一文明白 dapp。
  6. linux客户端被自动断开
  7. 您好!欢迎关注异贝!异贝是中国8000万中小微企业忠实的朋友,与您一起成长。异贝商学院今天我们就来设计一个中餐厅(酒楼)的引客、锁客方案!
  8. 知识付费小程序制作及相关问题
  9. CDR X6三折促销活动,可入
  10. 用java实现情人节