【GS专栏】7-R语言基础

知识/政策规划

2021-03-02


  前面我们已经了解了基因组选择的基础理论知识,以及各类模型和常用软件。那么,从现在开始我们进入GS的实战。从之前的介绍中我们可以知道,R语言作为一种免费开源软件,在统计绘图方面有着很大的优势。在动植物育种中,很多研究者已经开发了不少R包来做GS应用。所以,这次我们主要介绍R语言的一些基础语法和常规操作,以便大家快速分析自己的数据。

 

  1. 准备

  R下载安装

  官方地址:https://www.r-project.org/。使用任一中国镜像,根据平台选择安装R软件版本:https://mirrors.tuna.tsinghua.edu.cn/CRAN/。

 

 

  RStudio下载安装

  如果你使用的是Windows平台,安装R后,虽然自带RGui,可在其中编程使用,但编写、调试和运行都不是太友好。于是,我们进一步下载安装R语言的编辑器Rstudio,更加自由使用。

  下载地址:https://rstudio.com/products/rstudio/download/,选择免费版本即可。

  完成后打开RStudio界面由三部分组成:程序编辑窗口、控制台(Console)以及工作空间(Workspace)和历史(History)窗口,你可以根据需求进行一些个性化的设置。

 

 

  2. 数据类型

  R语言种有向量c()、矩阵matrix()、数组array()、数据框dataframe()、列表list()、因子factor()等数据类型,这些类型对应的变量、数据、函数及其结果都可视为对象。

 

 

  向量

  向量是用于存储数值、字符或逻辑数据的一维数组。示例代码:

  > vector_a <- c(3, 2, 1, 3, 5, -2, 4) #赋值<- 或 =

  # 数据提取

  > vector_a[3]

  [1] 1

  > vector_a[c(1, 3, 5)]

  [1] 3 1 5

  > vector_a[2:6]

  [1] 2 1 3 5 -2

  > vector_a[vector_a>3] #条件筛选

  [1] 5 4

  > vector_a[-1]

  [1] 2 1 3 5 -2 4

  > vector_a[-1:-3]

  [1] 3 5 -2 4

 

  矩阵

  R 语言为线性代数的研究提供了矩阵类型,这种数据结构很类似于其它语言中的二维数组,但 R 提供了语言级的 矩阵运算支持。矩阵里的元素可以是数字、符号或数学式。

  示例代码:

  # 创建矩阵

  > matrix2<-matrix(data=1:12,nrow=3,ncol=4, byrow=F)

  > matrix2 #12个数字元素构成的3行4列的矩阵

  [,1] [,2] [,3] [,4]

  [1,] 1 4 7 10

  [2,] 2 5 8 11

  [3,] 3 6 9 12

  # 元素提取

  > matrix1[1,3]

  [1] 3

  > matrix1[,3]

  [1] 3 7 11

  > matrix1[1,]

  [1] 1 2 3 4

 

  矩阵的运算在GS应用中较为常见,这里介绍一些基本的矩阵操作

  • 生成矩阵

  > mat <- matrix(1:16,4,4)

  > mat

  [,1] [,2] [,3] [,4]

  [1,] 1 5 9 13

  [2,] 2 6 10 14

  [3,] 3 7 11 15

  [4,] 4 8 12 16

 

  • 对角矩阵

  # 提取mat主对角线

  > diag(mat)

  [1] 1 6 11 16

  # 生成对角线都为1的对角矩阵

  > diag(4)

  [,1] [,2] [,3] [,4]

  [1,] 1 0 0 0

  [2,] 0 1 0 0

  [3,] 0 0 1 0

  [4,] 0 0 0 1

 

  • 提取矩阵半三角

  # 提取矩阵上三角

  > mat[upper.tri(mat)]

  [1] 5 9 10 13 14 15

  # 提取矩阵下三角

  > mat[lower.tri(mat)]

  [1] 2 3 4 7 8 12

 

  • 矩阵转置

  > t(mat)

  [,1] [,2] [,3] [,4]

  [1,] 1 2 3 4

  [2,] 5 6 7 8

  [3,] 9 10 11 12

  [4,] 13 14 15 16

 

  • 矩阵加减

  > X=Y=matrix(1:16,nrow=4,ncol=4)

  > X + Y

  [,1] [,2] [,3] [,4]

  [1,] 2 10 18 26

  [2,] 4 12 20 28

  [3,] 6 14 22 30

  [4,] 8 16 24 32

  > X -Y

  [,1] [,2] [,3] [,4]

  [1,] 0 0 0 0

  [2,] 0 0 0 0

  [3,] 0 0 0 0

  [4,] 0 0 0 0

 

  • 数与矩阵相乘除

  > X/2

  [,1] [,2] [,3] [,4]

  [1,] 0.5 2.5 4.5 6.5

  [2,] 1.0 3.0 5.0 7.0

  [3,] 1.5 3.5 5.5 7.5

  [4,] 2.0 4.0 6.0 8.0

  > 2*Y

  [,1] [,2] [,3] [,4]

  [1,] 2 10 18 26

  [2,] 4 12 20 28

  [3,] 6 14 22 30

  [4,] 8 16 24 32

 

  • 矩阵相乘

  > X*Y

  [,1] [,2] [,3] [,4]

  [1,] 1 25 81 169

  [2,] 4 36 100 196

  [3,] 9 49 121 225

  [4,] 16 64 144 256

 

  • 矩阵求逆

  > a <- matrix(rnorm(16),4,4)

  > a

  [,1] [,2] [,3] [,4]

  [1,] -1.4401782 -0.7371397 1.026640 -0.1850072

  [2,] 1.5002015 -1.0638962 -2.962298 0.1512067

  [3,] -0.1657594 0.4230006 1.699419 -0.1965050

  [4,] -1.0052562 -1.2422555 1.790331 0.4707040

  > solve(a)

  [,1] [,2] [,3] [,4]

  [1,] -0.3534151 0.5095296 0.9865575 0.1092723

  [2,] -0.4298639 -0.6254940 -0.6002996 -0.2186319

  [3,] -0.1013534 0.0974694 0.6212788 0.1882186

  [4,] -1.5037420 -0.9333211 -1.8403857 1.0649503

 

  数组

  数组array和矩阵类似,但维度可大于2。示例代码:

  > # 为要创建的数组设置行列和维度名

  > column.names <- c("COL1","COL2","COL3")

  > row.names <- c("ROW1","ROW2","ROW3")

  > matrix.names <- c("matrix1","matrix2")

  >

  > # 创建数组

  > array1 <- array(1:18,

  + dim = c(3,3,2),

  + dimnames = list(row.names,column.names,matrix.names))

  > array1

  , , matrix1

  COL1 COL2 COL3

  ROW1 1 4 7

  ROW2 2 5 8

  ROW3 3 6 9

  , , matrix2

  COL1 COL2 COL3

  ROW1 10 13 16

  ROW2 11 14 17

  ROW3 12 15 18

 

  数据框

  数据框(Data frame)可以理解成我们常说的"表格",不同的列可包含不同类型的数据。示例代码:

  > # 创建数据框

  > df<-data.frame(Name=c("A", "B", "C", "D"),

  + Sex=c("M", "F", "M", "M"),

  + Age=c(23,25,24,26),

  + Score=c(84,98,88,99))

  >

  > # 提取数据

  > df[1,3]

  [1] 23

  > df[1:2,]

  Name Sex Age Score

  1 A M 23 84

  2 B F 25 98

  > df[1,1:3]

  Name Sex Age

  1 A M 23

  > df[2:3,1:3]

  Name Sex Age

  2 B F 25

  3 C M 24

 

  列表

  列表是 R 语言的对象集合,可以用来保存不同类型的数据,可以是数字、字符串、向量、另一个列表等,当然还可以包含矩阵和函数。示例代码:

  > # 列表包含向量、矩阵、列表

  > list_data <- list(c("biobin","google","tecent"), matrix(c(1,2,3,4,5,6), nrow = 2),

  + list("biobin",12.3))

  > # 给列表元素设置名字

  > names(list_data) <- c("Sites", "Numbers", "Lists")

  > list_data

  $Sites

  [1] "biobin" "google" "tecent"

  $Numbers

  [,1] [,2] [,3]

  [1,] 1 3 5

  [2,] 2 4 6

  $Lists

  $Lists[[1]]

  [1] "biobin"

  $Lists[[2]]

  [1] 12.3

  > # 访问元素

  > list_data[1]

  $Sites

  [1] "biobin" "google" "tecent"

 

  3. 控制结构

  条件结构

  • if语句

  > x <- 50L

  > if(is.integer(x)) {

  + print("X 是一个整数")

  + }

  [1] "X 是一个整数"

 

  • if...else语句

  > x <- c("biobin","google","tencent")

  > if("weibo" %in% x) {

  + print("第一个 if 包含 weibo")

  + } else if ("biobin" %in% x) {

  + print("第二个 if 包含 runoob")

  + } else {

  + print("没有找到")

  + }

  [1] "第二个 if 包含 runoob"

 

  • switch语句

  > x <- switch(

  + 3,

  + "google",

  + "biobin",

  + "tencent",

  + "weibo"

  + )

  > print(x)

  [1] "tencent"

 

  循环结构

  • while语句

  > v <- c("Google","Biobin")

  > cnt <- 2

  > while (cnt < 7) {

  + print(v)

  + cnt = cnt + 1

  + }

  [1] "Google" "Biobin"

  [1] "Google" "Biobin"

  [1] "Google" "Biobin"

  [1] "Google" "Biobin"

  [1] "Google" "Biobin"

 

  • for语句

  > v <- LETTERS[1:4]

  > for ( i in v) {

  + print(i)

  + }

  [1] "A"

  [1] "B"

  [1] "C"

  [1] "D"

 

  • apply函数族

  > # 创建示例数据

  > rname = c("one","two","three")

  > cname = c("first","second")

  > b <- matrix(1:6,nrow=3, dimnames = list(rname, cname))

  > b

  first second

  one 1 4

  two 2 5

  three 3 6

  >

  > # 对每行求和

  > apply(b,1,sum)

  one two three

  5 7 9

  > # 对每列求均值

  > apply(b,2,mean)

  first second

  2 5

 

  4. 常用函数

  常用对象查看和处理函数

  • 帮助:?function,help(function)

  • 数据读取:read.table(),read.csv()

  • 数据写入:write.table(),write.csv()

  • 加载包:library()

  • 安装包:install.packages()

  • 对象长度/数量:length()

  • 数据维度:dim()

  • 数据结构:str()

  • 数据类型:class()

  • 数据元素名称:names()

  • 查看数据前6行:head()

  • 查看数据后6行:tail()

  • 查看当前对象列表:ls()

  • 删除对象:rm()

  • 判断数据类型:is.numeric()/is.character()/is.vector()/is.matrix()/is.data.frame()/is.factor()

  • 转化数据类型:as.numeric()/as.character()/as.vector()/as.matrix()/as.data.frame()/as.factor()

  • 数据转置:t()

  • 添加行:rbind()

  • 添加列:cbind()

  • 合并数据集:merge()

  • 数据筛选:subset()

  • 查找:grep()

  • 替换:sub()

 

  统计计算相关函数

  • 数据概要:summary()

  • 统计概括信息:describe()

  • 均值中位值:mean(),median()

  • 求和:sum()

  • 最大最小值:max(),min()

  • 分位数:quantile()

  • 方差标准差:var(),sd()

  • 分类汇总:table()

  • 绝对值:abs()

  • 平方根:sqrt()

  • 正态分布函数:rnorm()

  • 均匀分布函数:runif()

 

  5.资源推荐

  以上介绍了常用的R基本语法知识,要想系统学习R,至少需要阅读2-3本基础教程,这里做个推荐。

  • 《R语言实战 第二版》

  • 《R for Data Science》[1]

  • 《ggplot2:数据分析与图形艺术》

  • 《Advanced R 第二版》[2]

  今天的内容分享到这里啦。R语言基础是后续GS实战的基础,希望大家有所了解,多加练习,争取早日分析自己的数据。


相关推荐

新品发布 | 百奥云推出基因组局部组装服务

百奥云基于二代/三代测序数据以及中间结果文件(如fq/bam),自研局部组装算法与流程,并结合了大数据产品基因云湖(GenoLake)的海量数据管理、查询与分析等功能,为用户提供个性化的局部组装服务。通过百奥云的局部组装方案,用户可以快速获取基因/蛋白全长序列信息,避免传统实验所带来的时间和资源浪费,加快决策周期,提高研究和生产效率。同时,还可有效地解决大规模测序数据存储、查询和分析等问题,提高数据利用率,获取更全面的基因组信息,助力动植物研究和育种生产的顺利进行。

04-07

2024

AI大数据 | 百奥云育种数据科学家顾林林发表一种高效精准的集成学习基因组选择方法ELPGV

是否存在一种方法可以整合各种模型的结果以期望获得更加精准的预测呢?

04-03

2024

喜讯 | 百奥云助力湖南农大解析水稻耐盐杂种优势之谜

近日,湖南农业大学刘次桃/段美娟团队在国际著名期刊《Journal of Integrative Plant Biology》上发表研究论文:The OsWRKY72–OsAAT30/OsGSTU26 module mediates reactive oxygen species scavenging to drive heterosis for salt tolerance in hybrid rice。百奥云大数据部门负责人彭建祥以共同作者身份为本研究提供了个性化的数据分析支持。

03-21

2024

水稻智能育种联盟 | 水稻种质资源、品种观摩暨育种创新提升工程恳谈会圆满举行

2024年3月21日上午,水稻智能育种联盟2024水稻种质资源、品种观摩暨育种创新提升工程恳谈会圆满举行,本次会议共有三十余名水稻种业同仁参会,分别来自十余家种企及科研单位,就如何充分利用数字化能力,将我国的种质资源优势进一步转化为育种创新优势的问题齐聚一起,共商水稻种质资源交流与合作共赢,探索水稻品种自主创新能力提升路径

03-21

2024

百奥云为南繁种业发展注入新动力,水稻基因体检服务首次参展

百奥云本次大会携水稻基因体检服务首次参展,诚邀各位专家、老师及同仁共同探讨探讨未来农业发展的新趋势和技术创新。

03-21

2024

会议邀请 | 百奥云与您相约2024中国种子(南繁硅谷)大会

百奥云参加此次大会并在B11展台进行展示,现场还有产品讲解及抽奖小礼品。欢迎广大业界同仁前来展台交流,共谋发展,我们在此真诚期待您的到来。

03-08

2024