简明介绍
R语言是为数学研究工作者设计的一种数学编程语言,主要用于统计分析、数据可视化(统计图表)、数据挖掘。R语言最初由新西兰奥克兰大学的统计学家罗斯·伊哈卡(Ross Ihaka)和罗伯特·杰特曼(Robert Gentleman)于1993年创建,目前由R核心小组负责开发和维护。
- R语言是一个面向数据科学和统计分析的统计编程语言
- R语言是一种解释型编程语言
- R语言可运行于多种平台之上,包括Windows、UNIX和Mac OS X
为什么命名为R语言?有一种说法,Ross Ihaka和Robert Gentleman两位作者的名字的首字母都是R。
R与Python?在数据科学领域,Python能做的,R也能做,甚至更好,比如可视化。有一定R基础后,对统计学的学习帮助很大,这是Python不具备的。
R与Excel?对于数据量不大,或者复杂程度不高的需求来说,Excel很方便也很直观。但随着数据量或复杂程度不断增大,Excel解决起来难度系数就陡增,或者无法搞定,这就需要借助R编写代码完成。
R与C?R语言来自S语言,而S语言由Rick Becker, John Chambers, Alan Wilks等人在贝尔实验室开发,著名的C语言、Unix系统也是贝尔实验室开发的。R语言与C语言有不同的侧重领域,R语言是一种解释型的面向数学理论研究工作者的语言,而C语言是为计算机软件工程师设计的。
环境安装
Windows
从官方网站下载最新版本的安装程序(R-4.4.1-win.exe),双击运行下载的安装包,使用默认设置安装即可。
说明:Windows用户需要安装Rtools。从官方网站下载Rtools44 installer版本安装即可(下载R语言相匹配的版本)。
Linux
$ apt-get install r-base
$ R --version
集成环境
R软件本身提供图形界面(RGui),但推荐使用专门为R语言量身定制的集成开发环境(IDE)RStudio。从官方网站下载RStudio Desktop版本安装即可。
RStudio中可以通过快捷键Alt+-(Windows)快速输入赋值符号<-。
编程方式
交互式
使用R命令进入交互式的编程窗口。
$ R
脚本文件
使用Rscript命令(解释器)执行脚本文件(以.R为后缀名的文本文件)。
$ Rscript script.R
帮助文档
基础知识
R中所有的存在都是对象;R中发生的动作都是函数调用。
注释
R语言的注释符号为#,但只支持单行注释,如果有多行注释只需要在每一行添加#号。
# R语言实现两个数相加
a <- 9
b <- 4
print(a + b)
说明:使用if语句也可以实现多行注释
if(FALSE) {
"
这是一个多行注释的实例
注释内容放在单引号或双引号之间
"
}
变量
变量名称由字母、数字、点号.或下划线_组成,以字母或点开头。变量名称是区分大小写的。
变量赋值
最新版本的R语言可以使用左箭头<-、等号= 、右箭头->为变量赋值。
> var.1 = c(0,1,2,3)
> var.2 <- c("learn","R")
> c(TRUE,1) -> var.3
> print(var.1)
[1] 0 1 2 3
> print(var.2)
[1] "learn" "R"
> print(var.3)
[1] 1 1
>
查看变量
使用ls()函数查看已定义的变量。
删除变量
使用rm()函数删除变量。
运算符
说明:当两个向量长度相等的时候,就一一对应的完成计算;当两个向量长度不相等的时候,短的向量会循环补齐(recycling),保持与长向量的长度一致后,再做运算。当长向量的长度不是短向量的整数倍的时候,R语言会提出友好的警告。因此,为了代码的可读性,除非某一个向量长度为1,尽可能避免长度不一致的向量之间的运算。
特殊值
-
Inf(Infinity):表示无限大。-Inf表示无限小
-
NaN(Not a Number):表示非数值
-
NA(Not available):表示缺失状态
-
NULL(No value):表示没有值,或者空值的意思,表示变量实际上没有任何值,或者甚至不存在。
数据类型
typeof(x) # 返回类型,区分integer和double
mode(x) # 返回模式,将integer和double当作numeric
storage.mode(x) # 返回模式,与mode()函数相同
class(x) # 返回类别
# 判断函数
is.logical(x) # 是否为逻辑型
is.numeric(x) # 是否为数值型
is.integer(x) # 是否为整数型
is.double(x) # 是否为双精度型
is.character(x) # 是否为字符型
is.complex(x) # 是否为复数型
is.raw(x) # 是否为原生型
# 转换函数
数据结构
流程控制
分支语句
如果符合条件(必须返回逻辑值,即TRUE或者FALSE),就执行某个操作。
if (condition1) {
expression1
} else if (condition2) {
expression2
} else if (condition3) {
expression3
} else {
expression
}
# 快捷方式
ifelse(test, yes, no)
# expression可以是整数或字符串,如果是整数则返回对应位置的值,如果是字符串则返回对应的变量名的值
switch(expression, case1, case2, case3....)
for循环语句
遍历一个可迭代对象(如一个向量),并重复执行某个操作。---计数循环
for (var in seq) {
expression
}
while循环语句
只要符合条件就重复执行某个操作。---当型循环,可能一次都不执行
while(condition) {
expression
}
说明:while循环比for循环简单,for循环总是可以改写成while循环,但是while循环不一定能改写成for循环。
repeat循环语句
重复执行某个操作(一般在循环体内用if与break退出)。---直到型循环,至少执行一次
repeat {
expression
if(condition) {
break
}
}
循环控制语句
-
break:退出当前循环
-
next:跳过本轮循环,开始下一轮循环(类似其他语言的continue)
自定义函数
函数定义
function_name <- function(arg_1, arg_2, ...) {
expression
return(output)
}
(1)形式参数可以为空,也可以为多个,形式参数可以指定缺省值。在定义函数时,没有缺省值的参数写在前面,有缺省值的参数写在后面。
(2)返回值默认是函数体的最后一个表达式,也可以用return(x)指定返回值。如果函数需要返回多个结果,可以打用列表(list)进行包装。函数可以返回一个invisible(y), 表示其返回的值仍是y的值,但直接在R命令行调用此函数时不自动显示返回值,print()或cat()显式地要求才显示。
(3)允许使用没有函数名的函数对象, lapply类的函数经常使用无名函数对象作为输入。R为无名函数提供了\(x) expression这样的简写格式。
vapply(iris[,1:4], function(x) max(x) - min(x), 0.0)
vapply(iris[,1:4], (x) max(x) - min(x), 0.0)
函数调用
(1)可以按照位置顺序传入实参,也可以按照名称传入实参(name=object)
fsub(3, 1)
fsub(x=3, y=1)
(2)将形参、实参对应关系写成一个列表,通过do.call()函数进行函数调用
fsub(3, y=1)
do.call(fsub, list(3, y=1))
(3)使用管道操作符来简化函数的复合调用
sum(log(x, b))
x |> log(base = b) |> sum()
说明:R从4.1.0版本开始提供了一个|>管道运算符可以对同一个变量进行多个步骤的操作,例如h(g(f(x)))可以写成 x |> f() |> g() |> h()。在|>表示的管道中, 上一步的输出通过管道作为下一步的第一个自变量。如果需要当作下一步的其它自变量,可以用自变量名 = _的特殊格式, 这里_代表管道中上一步的结果。
(4)递归调用时最好用Recall代表调用自身,这样保证函数即使被改名递归调用仍指向原来定义。
fib1 <- function(n){
if(n == 0) return(0)
else if(n == 1) return(1)
else if(n >=2 ) {
return(Recall(n-1) + Recall(n-2))
}
}
输入输出
- 使用print()函数输出到控制台
- 使用cat()函数输出到文件
- 使用sink()函数将控制台输出写入到文件
print(123)
print("123")
# 覆盖写入
cat("hello", file="r_test.txt")
# 追加写入
cat("world", file="r_test.txt", append=TRUE)
# 控制台和文件同样输出
sink("r_test.txt", split=TRUE)
print("hello r!")
# 取消输出到文件
sink()
包管理
包(Package)是R程序,注释文档、实例、测试数据等资源的集合。
- CRAN(Comprehensive R Archive Network,R综合档案网络):R语言社区推荐的标准源,一般建议使用国内镜像源安装。使用install.packages()函数下载和安装。
- Bioconductor:专门存储生物信息学(bioinformatics)分析所用R包的网站,一般建议使用国内镜像源安装。使用BiocManager::install()函数下载和安装。
- GitHub:分享在GitHub网站。使用devtools::install_github()函数下载和安装。
- 本地安装:手动下载安装包。使用devtools::install_local()函数安装。
内置R包:base、datasets、utils、graphics
# 查看包的安装目录
print(.libPaths())
# 查看已安装的包
print(library())
# 查看已载入的包
print(search())
# 使用包名安装新包
install.packages("package_name")
install.packages("package_name", repos = "https://mirrors.ustc.edu.cn/CRAN/")
# 使用本地文件安装新包
install.packages("package_name.zip")
# 载入包
library("package_name")