R语言笔记6:在R中写一些简单的函数
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中写一些简单的函数相关推荐
- R语言笔记6:在R中写一些简单的函数、functions基础和作用域
R语言基础系列: 1数据类型(向量.数组.矩阵. 列表和数据框) 2读写数据所需的主要函数.与外部环境交互 3数据筛选--提取对象的子集 4向量.矩阵的数学运算 5控制结构 Your first R ...
- R语言笔记2:读写数据所需的主要函数、与外部环境交互
R语言基础系列前情提要: - 1数据类型(向量.数组.矩阵. 列表和数据框) Getting Data In and Out of R (一)读取数据 读取数据所需的几种函数: read.table. ...
- R语言笔记一:R软件的下载、界面简介、帮助文档
如何使用R软件求解统计问题? 一.R软件简介 R是一个有着统计分析功能及强大作图功能的软件系统.R既是一种软件也可以说是一种语言. R软件是完全免费的,我们可以通过R软件网站(https://www. ...
- R语言笔记1:t检验和Wilcoxon检验
转自新浪博客,转载地址:http://blog.sina.com.cn/s/blog_427c24ae0102wg7n.html 1.t检验 数据是高血压患者治疗前后舒张压的变化,这个内容最熟悉不过了 ...
- R语言笔记——”org.Hs.eg.db“脱坑记录
R语言笔记--"org.Hs.eg.db"脱坑记录 "org.Hs.eg.db"是发布在bioconductor平台上面的一个数据库文件,该包中装有较多的主流数 ...
- R语言计算资本资产定价模型(CAPM)中的Beta值和可视化
原文链接:http://tecdat.cn/?p=22588 今天我们将计算投资组合收益的CAPM贝塔.这需要拟合一个线性模型,得到可视化,从资产收益的角度考虑我们的结果的意义. 简单的背景介绍,资本 ...
- R语言在气象、水文中数据处理及结果分析、绘图
R语言是一门由统计学家开发的用于统计计算和作图的语言(a Statistic Language developed for Statistic by Statistician),由S语言发展而来,以统 ...
- R语言ggplot2可视化:ggplot2中使用element_text函数设置轴标签文本粗体字体(bold text,只设置x轴的标签文本使用粗体字体)
R语言ggplot2可视化:ggplot2中使用element_text函数设置轴标签文本粗体字体(bold text,只设置x轴的标签文本使用粗体字体) 目录
- R语言ggplot2在可视化图像中添加横线并在横线中添加文本、为横线中添加的文本添加文本框、自定义文本框的填充色(background color for a text annotation)
R语言ggplot2在可视化图像中添加横线并在横线中添加文本.为横线中添加的文本添加文本框.自定义文本框的填充色(background color for a text annotation) 目录
最新文章
- tensorflow.transpose() 举例
- python的excel库_Python-excel相关库
- 洛谷P1373 小a和uim之大逃离
- 跟我一起写 Makefile(十)
- 如何使用C语言的面向对象?
- css样式中如何设置中文字体?
- apache伪静态综述
- WinSocket的一些主要函数.
- 手机距离传感器坏了有什么影响_恢复出厂设置对手机有什么影响?
- 数据分析工具具备什么功能
- windows10(专业版和家庭版)---禁止自动更新系统
- spring教程笔记4
- 唯有自己变得强大_强大自己!(经典)
- 一个前端写的php博客系统--支持markdown哦
- 基于人脸特征点实现疲劳检测
- 差分GPS(differential GPS-DGPS,DGPS)
- 【细胞分割】基于中值滤波+分水岭法实现细胞计数matlab源码
- async、await其实是generator和promise的语法糖
- 海洋CMS采集-内置接口的海洋CMS采集
- 阿里云ECS安装MySql数据库