欧剑虹老师BOOK学习记录:第一章 R/Bioconductor
2019-05-03 本文已影响68人
热衷组培的二货潜
首先最重要的参考链接:
image.png啊啊啊,如有侵犯版权, 麻烦请私信我,看到立马删除!
主要用来记录自己可能要用的一些知识点。(基本复制粘贴,建议直达链接)
4 - .7 + .3为什么会不等于零呢?
- 计算机在保存一个浮点数a时,是由两个数m和e来表示:。m是有位数限制的,这就决定了等号右边不可能完全等于等号左边的a。所以浮点数在计算机中的保存只是它的一个近似数。在计算机编程中,应该十分注意浮点数问题。
在R中,逻辑运算符(logical operator)有!, &, &&, |, ||, or, is TRUE等等。&与&&, |与||有什么区别呢?
- 在R中将
&
和|
称为短逻辑符
,&&
及||
称为长逻辑符
。长逻辑符
只比较左边和右边的第一个元素,而短逻辑符
会一一比较所有的元素。
a<-c(TRUE, FALSE, TRUE, FALSE)
b<-c(FALSE, FALSE, TRUE, TRUE)
c<-c(TRUE, FALSE, FALSE, FALSE)
> a & b
## [1] FALSE FALSE TRUE FALSE
> a && b
## [1] FALSE
待我长发及腰,少年娶我可好? ——语出: 何晓道 《十里红妆女儿梦》
hairLength <- 25
waisHeight <- 110
height <- 168
marryMe <- FALSE
if(hairLength >= height - waisHeight){marryMe <- TRUE}
ifelse{marryMe, "YES", "NO"}
合理使用空格
- 在逗号后一定使用空格。比如a, b, c。而不应该是a,b,c。这样做有利于系统自动换行。
- 在函数传递参数时等号(=)左右不使用空格。比如someFunc(a=1, b=2),而不应该是someFunc(a = 1, b = 2)。
- 在逻辑运算符左右使用空格,比如a == b。
- 在赋值运算符左右使用空格,比如a <- 2。
软件安装
- 1
source("http://www.bioconductor.org/biocLite.R")
library(BiocInstaller)
biocLite() ##安装Bioconductor
biocLite("trackViewer") ##安装trackViewer软件包
library(trackViewer) ##加载trackViewer软件包
## 查看当前的安装源
biocinstallRepos()
## 使用chooseBioCmirror函数选择合适的镜像
chooseBioCmirror()
- 从
Bioconductor 3.8
以后, 使用BiocManager
软件包。
install.packages("BiocManager", repos="https://cloud.r-project.org")
library(BiocManager)
install("trackViewer")
# 选择镜像安装
repositories()
chooseBioCmirror()
chooseCRANmirror()
使用
I()
- 如果直接使用list来构建data.frame,不能直接成功。我们需要使用I()函数来整合它。这里的I是AsIs的意思,即指输入是什么就是什么。
data.frame(A=1:3, B=I(list(1, 1:2, letters[1:3])))
## A B
## 1 1 1
## 2 2 1, 2
## 3 3 a, b, c
保存当前对话中所有的数据
save(list=ls(all=TRUE), file="all.RData") ##有一个快捷函数为save.image()
rm(list=ls()) ##删除对话中所有的对象
ls()
unlink("all.RData") ## 删除刚写入的文件
假设我只想保存当前对话中的指定的对象,并且希望使用最大的压缩比,应该怎么办呢?
## 保存当前对话中的mat1,使用最大的压缩比
save("mat1", file="mat1.rda", compress="bzip2", compression_level=9)
file.info("mat1.rda")$size ##文件的大小
字符串处理
substr
chartr
paste
strsplit
sort
match
%in%
pmatch
charmatch
format
strwrap
#赋值
mychar <- c("ACTACCACTAACCACT","TCATCCATTCGTGGG","GTTGTTCCATAG")
# 获取字符串长度
nchar(mychar)
## [1] 16 15 12
length(mychar)
## [1] 3
# 截取第2个到第四个字符
substr(mychar, 2, 4)
## [1] "CTA" "CAT" "TTG"
# 将每一个序列中的第二个和第四个字符替换为`TTT`
substr(mychar, 2, 4)<-"TTT"
mychar
## [1] "ATTTCCACTAACCACT" "TTTTCCATTCGTGGG" "GTTTTTCCATAG"
# 替换,定义一个函数`dna2rna` 将`T`替换成`U`, 其实主要利用的是函数`chartr`.
dna2rna<-function(inputStr){
if(!is.character(inputStr))
stop("need character input")
is = toupper(inputStr)
chartr("T", "U", is)
}
dna2rna(mychar)
## [1] "AUUUCCACUAACCACU" "UUUUCCAUUCGUGGG" "GUUUUUCCAUAG"
# https://www.rdocumentation.org/packages/base/versions/3.5.3/topics/chartr
# chartr(old, new, x)
# tolower(x)
# toupper(x)
# casefold(x, upper = FALSE)
# 连接
paste("prefix",mychar,"postfix",sep="-")
## [1] "prefix-ATTTCCACTAACCACT-postfix" "prefix-TTTTCCATTCGTGGG-postfix"
## [3] "prefix-GTTTTTCCATAG-postfix"
paste(mychar,collapse="--")
## [1] "ATTTCCACTAACCACT--TTTTCCATTCGTGGG--GTTTTTCCATAG"
# 分割, 按照字符`C`对数据进行分割
strsplit(mychar,"C")
## [[1]]
## [1] "ATTT" "" "A" "TAA" "" "A" "T"
##
## [[2]]
## [1] "TTTT" "" "ATT" "GTGGG"
##
## [[3]]
## [1] "GTTTTT" "" "ATAG"
# 按照字符`C`或者`G`对数据进行分割
strsplit(mychar,"[CG]")
## [[1]]
## [1] "ATTT" "" "A" "TAA" "" "A" "T"
##
## [[2]]
## [1] "TTTT" "" "ATT" "" "T" "" ""
##
## [[3]]
## [1] "" "TTTTT" "" "ATA"
# 分割成单个字符
strsplit(mychar, "")
## [[1]]
## [1] "A" "T" "T" "T" "C" "C" "A" "C" "T" "A" "A" "C" "C" "A" "C" "T"
##
## [[2]]
## [1] "T" "T" "T" "T" "C" "C" "A" "T" "T" "C" "G" "T" "G" "G" "G"
##
## [[3]]
## [1] "G" "T" "T" "T" "T" "T" "C" "C" "A" "T" "A" "G"
# 排序
sort(mychar)
## [1] "ATTTCCACTAACCACT" "GTTTTTCCATAG" "TTTTCCATTCGTGGG"
# 匹配:`match`、`%in%`、`pmatch`、`charmatch`
exT<-c("Intron", "Exon", "promoter","enhancer")
match("Exon", exT)
## [1] 2
"promoter" %in% exT
[1] TRUE
pmatch("x", exT)
## [1] NA
charmatch("E", exT)
## [1] 2
charmatch("x", exT)
## [1] NA
pmatch(c("Exo","enh"), exT)
## [1] 2 4
# 格式化
format(1:10)
## [1] " 1" " 2" " 3" " 4" " 5" " 6" " 7" " 8" " 9" "10"
format(1:10, trim = TRUE)
## [1] "1" "2" "3" "4" "5" "6" "7" "8" "9" "10"
zz <- data.frame("(row names)"= c("aaaaa", "b"), check.names=FALSE)
format(zz)
## (row names)
## 1 aaaaa
## 2 b
format(zz, justify = "left")
## (row names)
## 1 aaaaa
## 2 b
正则匹配
. # 除了换行以外的任意字符
^ # 一行字符串的起始,它并不代表第一个字符,只代表这里开始新的一行字符串。
$ # 一行字符串的结束,它并不代表最后一个字符(因为换行符并不会被包含进匹配当中),只代表一行字符串到这里结束。
* # 零个或者多个之前的字符
+ # 一个或者多个之前的字符
? # 零个或者一个之前的字符
# 示例部分
t.e # t后面跟任意一个非换行字符然后跟字符e
# 它可以匹配 the
# tre
# tle
# 但是不匹配 te
# tale
^f # 一行字符以f起始
^ftp # 一行字符以ftp起始
e$ # 一行字符以e结尾
tle$ # 一行字符以tle结尾
und* # un跟着零个或者多个d字符
# 它会匹配 un
# und
# undd
# unddd (etc)
.* # 任意一个无换行的字符串,
# . 匹配任何一个非换行字符
# * 将匹配一个或者多个之前的字符.
^$ # 一个空行.
# 在正则中有方括号[],代表可以匹配其中任何一个字符。而^在[]中就有了新的意义,代表“非”, -代表了“之间”
[qjk] # q,j,k中任意一个字符
[^qjk] # 非q,j,k的任意其它字符
[a-z] # a至z中任意一个小写字符
[^a-z] # 非任意一个a至z小写字符的其它字符(可以是大写字符)
[a-zA-Z] # 任意一个英文字母
[a-z]+ # 一个或者多个小写英文字母
# |代表或者 小括号(...)可以把或者的部分括起来。注意小括号可能还有别的用途,但是在R当中先不使用。
jelly|cream # jelly或者cream
(eg|le)gs # eggs或者legs
(da)+ # da或者dada或者dadada 或者更多个da的重复
# 大括号括住1至2个数字,代表重复次数。
* # 零个或者多个之前的字符
+ # 一个或者多个之前的字符
? # 零个或者一个之前的字符
{n} # n个之前的字符
{n,} # 大于等于n个之前的字符
{n,m} # n至m个之前的字符
# 下面的是一些字符被转义符\转义会赋以了一些新的(有可能是约定俗成的)意义
\n # 换行符
\t # tab
\w # 任意字母(包括下划线)或者数字
# 等同于[a-zA-Z0-9_]
\W # \w的反义.
# 等同于[^a-zA-Z0-9_]
\d # 任意一个数字,等同于[0-9]
\D # \d的反义,等同于[^0-9]
\s # 任意一个空格,比如,
# space, tab, newline, 等
\S # \s的反义,任意一个非空格
\b # 单词的边界, 不能使用在[]内
\B # \b的反义
# 很明显,对于保留字符$, |, [, ), \, / 等等都需要转义字符\来转义表示:
\| # 竖线
\[ # \[左方括号 \]右方括号
\) # \(左小括号 \)右小括号
\* # 星号
\^ # 开号
\/ # 反斜杠
\\ # 斜杠