生信分析笔记

V1

2022/09/16阅读:19主题:山吹

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语言新版本同时支持=<-两种赋值符号,下表是主要的数学运算法则 关系运算符用于比较两个向量,结果返回TRUEFALSE,下表是主要的关系运算法则 逻辑运算符可用于数字、逻辑、复数向量。非零数字均为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(34)
> b = c(50)
> a + b
[18 4

向量后面加方括号输入数字标号,可以提取向量的一部分元素,也可以使用嵌套条件,如下。

> a = c(1020304050)
> a[1:4# 取出第 1 到 4 项,包含第 1 和第 4 项
[110 20 30 40
> a[c(135)] # 取出第 1, 3, 5 项
[110 30 50
> a[c(-1, -5)] # 去掉第 1 和第 5 项
[120 30 40

向量也可以和标量进行计算,常用的数学运算函数也能对向量起作用,同时还可以对向量进行排序等操作,如下。

向量数学运算:
> c(1.11.21.3) - 0.5
[10.6 0.7 0.8
> a = c(1,2)
> a ^ 2
[11 4

向量内元素排序:
> a = c(135246)
#sort函数升序排列
> sort(a)  
[11 2 3 4 5 6

#rev函数降序排列
> rev(a)  
[16 4 2 5 3 1

#order函数返回向量从小到大排序后在原始向量中位次
> order(a)   
[11 4 2 5 3 6
> a[order(a)]
[11 2 3 4 5 6

向量的统计学处理函数:

  • sum 求和
  • mean 求平均值
  • var 方差
  • sd 标准差
  • min 最小值
  • max 最大值
  • range 取值范围(最大值和最小值)

向量的批量生成可以使用seq(起始值,终止值,length.out=数值个数)命令,就能产生等差数列。也可以使用rep(数字,重复的个数)命令来产生多个重复数字序列。如下。

> seq(1,9,length.out=3)
[11 5 9
> rep(2,5)
[12 2 2 2 2

向量中常会用到NA和NULL表示异常数值。NA表示缺失,代表没有值但位置存在。NULL表示数据不存在,啥也没有无意义。

向量的逻辑处理which()函数用来筛选需要的数据的下标,all()函数用来检查向量是否全都是TRUE,any()函数用来检查向量中是否含有TRUE。如下。

> a = c(111213)
> b = a > 12
> print(b)
[1FALSE FALSE  TRUE
> which(b)
[13

> vector = c(1040786453626970)
> print(vector[which(vector >= 60 & vector < 70)])
[164 62 69

> all(c(TRUETRUETRUE))
[1TRUE
> all(c(TRUETRUEFALSE))
[1FALSE
> any(c(TRUEFALSEFALSE))
[1TRUE
> any(c(FALSEFALSEFALSE))
[1FALSE
  • 字符串(string)

文字内容以字符串形式储存,可以用'hahaha'单引号或者"hahaha"双引号都行,接下来介绍字符串的操作函数。

#全部转大写
> toupper("ShengXinFenXiBiJi")
[1"SHENGXINFENXIBIJI"
#全部转小写
> tolower("ShengXinFenXiBiJi")
[1"shengxinfenxibiji"
#统计字符数
> nchar("ShengXinFenXiBiJi")
[117
#截取编号从1到8的字符
> substr("ShengXinFenXiBiJi",1,8)
[1"ShengXin"
#截取编号14之后的字符
> substring("ShengXinFenXiBiJi",14)
[1"BiJi"
#将字符转换为数字
> as.numeric("123")
[1123
#将数字转换成字符
> 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(123456)
> matrix(vector, 23, byrow=TRUE)
     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    4    5    6

矩阵中每个值都能直接提取。

> m1 = matrix(vector, 23, byrow=TRUE)
> m1[1,1# 第 1 行 第 1 列
[11
> m1[1,3# 第 1 行 第 3 列
[13

矩阵的每一行和每一列都能设置名称,用下列方式完成。

> m1 = matrix(vector,2,3,byrow=TRUE)
> colnames(m1) = c("s","f","f")
> rownames(m1) = c("t","o")
> m1
  s f f
1 2 3
4 5 6

分类:

后端

标签:

数据结构与算法

作者介绍

生信分析笔记
V1

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