
生信分析笔记
2022/09/16阅读:24主题:山吹
R语言学习笔记:从零开始?数据结构和基础知识
R语言是一种数学编程语言,主要用于统计分析、绘图、数据挖掘。其在生物信息大数据分析处理过程中扮演着重要角色,笔者从今天开始分享R语言学习笔记。
环境安装
-
Windows
官方地址:https://cloud.r-project.org/bin/windows/base/

-
Linux
官方地址:https://cloud.r-project.org/bin/linux/
sudo apt update
sudo apt -y upgrade
sudo apt -y install r-base
-
macOS
官方地址:https://cloud.r-project.org/bin/macosx/

R语言基础
R 语言赋值使用的是左箭头<-
符号,输出函数是print()
,可以用以下代码输出hello,world!,其中mystring是一个变量。
myString <- "Hello, World!"
print ( myString )
变量
-
变量名称由字母,数字以及点号 .
或下划线_
组成。 -
赋值可以使用左箭头 <-
、等号=
、右箭头->
赋值。
# 使用左箭头 <-赋值
> var.2 <- c("learn","R")
> print(var.2)
[1] "learn" "R"
# 使用右箭头 -> 赋值
> c(TRUE,1) -> var.3
> print(var.3)
[1] 1 1
-
查看已定义的变量使用ls()函数
print(ls())
[1] "var.1" "var.2" "var.3"
-
删除变量用rm()函数
> rm(var.3)
> print(ls())
[1] "var.1" "var.2"
-
交互式编程,比如在Linux系统下使用R,进入时输入 R
,退出时输入q()
-
文件脚本
后缀为.r
的文件时r脚本,执行时使用Rscript
命令后接脚本文件。
输入与输出
-
print()
是输出函数,支持数字、字符等输出。 -
cat()
函数能够拼接输出结果,会自动在拼接元素间加一个空格。
> cat(ni,hao,ya!)
ni hao ya!
-
输出内容到文件:使用 cat()
函数,不会在控制台产生结果,文件地址使用绝对路径,这个操作是覆盖写入,若需要保留文件原来内容,需要设置参数append=TRUE
cat("NI", file="D:\\r_test.txt")
cat("HAO", file="/Users/r_test.txt", append=TRUE)
输出结果:NIHAO
-
sink()
函数可以把控制台内容写入文件中,同时控制台不再显示输出了。
该操作默认覆盖写入,若需追加写入使用参数append=TRUE
,若需控制台也同样输出则使用参数aplit=TRUE
,若需取消则使用sink()
-
文字输入: readLines(xxx.txt)
命令可以读取文件内容为字符串
所读文件每一行末尾必须有换行符。
-
工作目录:使用 getwd()
获取当前工作目录,使用setwd()
设置当前工作目录。
# 当前工作目录
print(getwd())
# 设置当前工作目录
setwd("/Users/runoob/runoob-test2")
# 查看当前工作目录
print(getwd())
-
注释功能:主要用于代码的解析,让读者更易理解,不会影响代码的执行。使用时在需要注释的一行前面加 #
即可。
R基础运算
赋值
R语言新版本同时支持=
和<-
两种赋值符号,下表是主要的数学运算法则: 关系运算符用于比较两个向量,结果返回
TRUE
或FALSE
,下表是主要的关系运算法则: 逻辑运算符可用于数字、逻辑、复数向量。非零数字均为
TRUE
,下表是主要的逻辑运算法则: 或
|
与&
非!
,上述三个运算针对向量的每个元素,&&
和||
只针对第一个元素。
-
特殊运算符:

-
常见数学函数:
sqrt(n)
n的平方根
exp(n)
自然常数e的n次方
log(m,n)
对数函数,返回n的几次方为m
log10(m)
相当于log(m,10)
round (n, m)
对 n 保留 m 位小数四舍五入
ceiling (n)
对 n 向上取整
floor (n)
对 n 向下取整
数据类型
R 语言中的最基本数据类型主要有三种:
-
数字:一般形式或科学计数法 -
逻辑:布尔型(TRUE 、FALSE) -
文本:字符串String,包含在单引号或者双引号之中。
按对象类型分为以下5种:

-
向量(vector)
> a = c(3, 4)
> b = c(5, 0)
> a + b
[1] 8 4
向量后面加方括号输入数字标号,可以提取向量的一部分元素,也可以使用嵌套条件,如下。
> a = c(10, 20, 30, 40, 50)
> a[1:4] # 取出第 1 到 4 项,包含第 1 和第 4 项
[1] 10 20 30 40
> a[c(1, 3, 5)] # 取出第 1, 3, 5 项
[1] 10 30 50
> a[c(-1, -5)] # 去掉第 1 和第 5 项
[1] 20 30 40
向量也可以和标量进行计算,常用的数学运算函数也能对向量起作用,同时还可以对向量进行排序等操作,如下。
向量数学运算:
> c(1.1, 1.2, 1.3) - 0.5
[1] 0.6 0.7 0.8
> a = c(1,2)
> a ^ 2
[1] 1 4
向量内元素排序:
> a = c(1, 3, 5, 2, 4, 6)
#sort函数升序排列
> sort(a)
[1] 1 2 3 4 5 6
#rev函数降序排列
> rev(a)
[1] 6 4 2 5 3 1
#order函数返回向量从小到大排序后在原始向量中位次
> order(a)
[1] 1 4 2 5 3 6
> a[order(a)]
[1] 1 2 3 4 5 6
向量的统计学处理函数:
-
sum
求和 -
mean
求平均值 -
var
方差 -
sd
标准差 -
min
最小值 -
max
最大值 -
range
取值范围(最大值和最小值)
向量的批量生成可以使用seq(起始值,终止值,length.out=数值个数)
命令,就能产生等差数列。也可以使用rep(数字,重复的个数)
命令来产生多个重复数字序列。如下。
> seq(1,9,length.out=3)
[1] 1 5 9
> rep(2,5)
[1] 2 2 2 2 2
向量中常会用到NA和NULL表示异常数值。NA
表示缺失,代表没有值但位置存在。NULL
表示数据不存在,啥也没有无意义。
向量的逻辑处理:which()
函数用来筛选需要的数据的下标,all()
函数用来检查向量是否全都是TRUE,any()
函数用来检查向量中是否含有TRUE。如下。
> a = c(11, 12, 13)
> b = a > 12
> print(b)
[1] FALSE FALSE TRUE
> which(b)
[1] 3
> vector = c(10, 40, 78, 64, 53, 62, 69, 70)
> print(vector[which(vector >= 60 & vector < 70)])
[1] 64 62 69
> all(c(TRUE, TRUE, TRUE))
[1] TRUE
> all(c(TRUE, TRUE, FALSE))
[1] FALSE
> any(c(TRUE, FALSE, FALSE))
[1] TRUE
> any(c(FALSE, FALSE, FALSE))
[1] FALSE
-
字符串(string)
文字内容以字符串形式储存,可以用'hahaha'
单引号或者"hahaha"
双引号都行,接下来介绍字符串的操作函数。
#全部转大写
> toupper("ShengXinFenXiBiJi")
[1] "SHENGXINFENXIBIJI"
#全部转小写
> tolower("ShengXinFenXiBiJi")
[1] "shengxinfenxibiji"
#统计字符数
> nchar("ShengXinFenXiBiJi")
[1] 17
#截取编号从1到8的字符
> substr("ShengXinFenXiBiJi",1,8)
[1] "ShengXin"
#截取编号14之后的字符
> substring("ShengXinFenXiBiJi",14)
[1] "BiJi"
#将字符转换为数字
> as.numeric("123")
[1] 123
#将数字转换成字符
> as.character(1234)
[1] "1234"
#以固定分隔符拆分字符
> strsplit("2022;9;16",";")
[[1]]
[1] "2022" "9" "16"
#替换字符中的特定内容
> gsub("/","-","2022-9-16")
[1] "2022-9-16"
> gsub("-","/","2022-9-16")
[1] "2022/9/16"
-
矩阵(matrix)
矩阵由向量生成,向量的值依次以一列一列的方式填充,如果想按行填充,添加byrow=TURE
参数。
> vector=c(1, 2, 3, 4, 5, 6)
> matrix(vector, 2, 3, byrow=TRUE)
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
矩阵中每个值都能直接提取。
> m1 = matrix(vector, 2, 3, byrow=TRUE)
> m1[1,1] # 第 1 行 第 1 列
[1] 1
> m1[1,3] # 第 1 行 第 3 列
[1] 3
矩阵的每一行和每一列都能设置名称,用下列方式完成。
> m1 = matrix(vector,2,3,byrow=TRUE)
> colnames(m1) = c("s","f","f")
> rownames(m1) = c("t","o")
> m1
s f f
t 1 2 3
o 4 5 6
作者介绍

生信分析笔记
欢迎关注公众号:生信分析笔记