生信人的R基础

R包的安装、卸载和升级

1.安装

普通安装
install.packsages()
bioconductor包安装
source("http://bioconductor.org/biocLite.R") 
install.packages('hgu133a.db')
github包安装
install.packages("devtools")
devtools::install_github("GuangchuangYu/rvcheck")
镜像安装
library(devtools) 
source("https://bioconductor.org/biocLite.R") 
options("repos" = c(CRAN="https://mirrors.tuna.tsinghua.edu.cn/CRAN/"))
options(BioC_mirror="https://mirrors.ustc.edu.cn/bioc/")  
BiocInstaller::biocLite('hgu133a.db')

2.更新R以及RStudio

win用包更新R
install.packages("installr") 
require(installr)
updateR()
ios用包更新R
install.packages('devtools') #assuming it is not already installed
library(devtools)
install_github('andreacirilloac/updateR')
library(updateR)
updateR(admin_password = 'Admin user password')

3.查看加载包、卸除加载包及安装包与卸载包

查看已加载的包
(.packages())
卸除已加载的包
detach("package:RMySQL")
  • 注意是卸除,不是卸载,也就是说不是把包从R运行环境中彻底删除,只是不希望该包被加载使用。
  • 在包使用函数冲突,检验函数依赖时比较有用。
彻底删除已安装的包
 remove. packages(c("pkg1","pkg2") , lib = file .path("path", "to", "library"))

R语言基础

对像的5种基本属性:

  • 字符(characte)
  • 数值(numeric:real numbers)
  • 整数(integer)
  • 复数(complex):1+2i
  • 逻辑(logical:TRUE/False)
  • class( )为查看数据类型的函数
  • y <- "hallo word"表示字符型(character)

名称属性:

  • 名称 (name)
  • 维度 (dimensions:matrix,array)
  • 类型(class)
  • 长度(length)

数据结构:

  • 向量(vetocr):只能包含同一类型的对象。

创建函数的vector的方法:

x<- vector("character",length=10)       
> x1<-1:4       
> x2<-c(1,2,3,4)
  • 例子:
x3<- c(TRUE,10,"a")表示字符型
# 字符、数字的优先级需要了解
x3<- c(TRUE,10,"a")    
> class(x3) 
[1] "character"
as.numeric(x3)      
[1] NA 10 NA
#  Warning message:强制改变过程中产生了NA 

x3<- c(TRUE,10,"a")
class(x3)
[1] "character"
as.numeric(x3)
[1] NA 10 NA
# Warning message:强制改变过程中产生了NA其他强制转换的函数:as.character()/as.logical()

names函数

x1<- 1:4
names(x1)<-c("a","b","c","d")

数据结构总结:

  • 向量(vector):只能包含同一类型的对像
  • 创建向量:
  1. vector()
  2. c() 说明:使用c()函数,如果其中一个元素是字符,则非字符值强制为字符类型。
  3. as.logical()/as.numeric()/as.character() 查看当先对象的类型

矩阵(matrix)

  • 向量+维度属性(整数向量:nrow行,ncol列)
    x<-matrix(nrow = 3,ncol = 2)
  • matrix()至少需要传入两个参数:nrow()/ncol(),那么改矩阵未被赋值,就会以缺失值NA代替
    x<- matrix(1:6,nrow = 2,ncol = 3)
    也可简写为:
    x<- matrix (1:6,2,3)
  • 矩阵是先填充列
  • dim()表示矩阵的维度属性
    dim(x)
  • attributes()用来查找矩阵有多少属性,有哪些属性

矩阵就是向量+维度:

y<-1:6
dim(y)<-c(2,3)

向量和矩阵变化:

> a<-1:10
> is.vector(a)
[1] TRUE
> dim(a)<-c(2,5)
> is.matrix(a)
[1] TRUE
> pheatmap::pheatmap(a)
> b <- as.data.frame(a)
> is.data.frame(b)
[1] TRUE

拼接矩阵

y2<- matrix(1:6,nrow = 2,ncol = 3)

  • rbind(y,y2)表示合并行nrow
  • cbind(y,y2)列拼接

数组array

  • 与矩阵类似,但是维度可以大于2
x<-array(1:24,dim = c(4,6))
x1<-array(1:24,dim = c(2,3,4))
# 表示有3个维度,有4个2行3列

列表(list)

  • 可以包含不同类型的对像(与向量vector区别)
  • 矩阵和数组可以包含很多元素,但是多个元素之间必须是一致的。
l<-list("a",2,10L,3+4i,TRUE)
l2<-list(a=1,b=2,c=3)
l3<-list(c(1,2,3),c(4,5,6,7))

矩阵赋名

x<-matrix(1:6,nrow = 2,ncol = 3)
dimnames(x)<-list(c("a","b"),c("c","d","e"))
# 试试下面这个呢
dimnames(x)<-list(c("a","b"),c("c","d","e","f"))
#  Error in dimnames(x) <- list(c("a", "b"), c("c", "d", "e", "f")) : 'dimnames'的长度[2]必需与陈列范围相等

因子(factor)

  • 因子用来处理 分类数据(分为)有序 vs.无序
  • 因子=整数向量+标签(label)(优于整数向量)
  • 无序:Male/Female vs.有序:1/2
  • 常用与lm(),glm()

创建因子(factor)

x<-factor(c("female","man","female"))
  • 运行如下:
x
[1] female man    female
  • Levels: female man (levels就是标签?此处是以female为基线)

y<-factor(c("female","man","female"),levels = c("man","female"))

  • 运行结果如下:
y
[1] female man    female

Levels: man female(那么此处就是以man为基线)

  • 可通过levels来设置factor中的基线水平

可使用table函数对感兴趣的factor进行了解:

table(y)
y
man female 
1      2 

因子=整数向量+标签(label)

  • levels为factor的一个属性,可以用unclass去除factor的属性
    unclass(x)
  • 运行如下:
unclass(x)
[1] 1 2 1
  • attr(,"levels") 曾经的属性为levels,有两个水平(female,male)
[1] "female" "man"   
class(unclass(x))

缺失值(missng value)

  • NA/NaN:NaN属于NA,NA不属于NaN
  • NaN一般用于表示数值的缺失
  • NA可表示数值、字符型
  • NA有类型属性存在:integer NA,character NA等
  • is.na()/is.nan()用来判断一个向量中是否存在缺失值
  • example:x<-c(1,NA,2,NA,3)
is.na(x)
[1] FALSE  TRUE FALSE  TRUE FALSE
is.nan(x)
[1] FALSE FALSE FALSE FALSE FALSE
  • 试着将x<-c(1,NA,2,NA,3)改为x<-c(1,NaN,2,NaN,3)

数据框(data frame)

  • 用来存储表格数据(tabular data)
  • 视为各元素长度相同的列表:
  • 每个远元素代表一列数据
  • 每个元素的长度代表行数
  • 元素类型可以不用
    df<-data.frame(id=c(1,2,3,4),name=c("a","b","c","d"),gender= c(TRUE,FALSE,FALSE,TRUE))
  • nrow(df)/ncol(df)查看数据框有多少行/列
df
id name gender
1  1    a   TRUE
2  2    b  FALSE
3  3    c  FALSE
4  4    d   TRUE
  • 也可nrow(df)/ncol(df)用来查看行/列
  • 区别矩阵:每行每列元素需要一样,但两者结构相似
  • df<-list(id=c(1,2,3,4),name=c("a","b","c","d"),gender= c(TRUE,FALSE,FALSE,TRUE))
  • 运行如下:
>df
$id
[1] 1 2 3 4
                                    
$name
[1] "a" "b" "c" "d"
                                    
$gender
[1]  TRUE FALSE FALSE  TRUE
  • df2<-data.matrix(id=c(1,2,3,4),name=c("a","b","c","d"),gender= c(TRUE,FALSE,FALSE,TRUE))

  • 运行如下:Error in data.matrix(id = c(1, 2, 3, 4), name = c("a", "b", "c", "d")

  • 参数没有用(id = c(1, 2, 3, 4), name = c("a", "b", "c", "d"), gender = c(TRUE, FALSE, FALSE, TRUE))

  • df3<-data.frame(id=c(1,2,3,4),score=c(80,86,90,100))

  • 运行如下:

df3
id score
1  1    80
2  2    86
3  3    90
4  4   100
  • data.matrix(df3)转换为矩阵
data.matrix(df3)
id score
[1,]  1    80
[2,]  2    86
[3,]  3    90
[4,]  4   100

处理缺失值NA

x <- c(1,NA,2,NA,3)
is.na(x)
x[is.na(x)]
x[!is.na(x)]
  • complete.cases选取x,y中都不是NA中的缺失值NA,返回值为逻辑(TRUE,FALSE)
x <- c(1,NA,2,NA,3)
y<- c("a","b",NA,"c",NA)
z<- complete.cases(x,y)
x[z]
y[z]
head(airquality)
complete.cases(airquality)
g<-complete.cases(airquality)
airquality[g,][1:10,]
  • 运行查看各个代码的意义。

向量化操作:

  • 可用于vector、matrix等结构操作,使代码简单已读、易于操作。
x<-1:5
y<-6:10
x+y
x/y
x<-matrix(1:4,nrow = 2,ncol = 2)
y<-matrix(rep(2,4),nrow =2,ncol=2)
x*y
x/y
  • x%*%y矩阵乘

重要函数的使用

目录为:

  • 处理循环:r不仅有for/while循环函数,还有一句话循环函数
  • 排序
  • 总结数据信息

lapply

  • 可以循环处理列表中的每一个元素
  • lapply(参数):lapply(列表,函数/函数名,其他参数)
  • str(lapply)
x<- list(a=1:10,b=c(11,21,31,41,51))
lapply(x,mean)
sapply(x,mean)  
lapply(x,runif)
lapply(x,runif,min=0,max=100)
  • runif函数表示为随机抽取向量,默认的范围为0-1
  • lapply()函数通常传入为list,在上个函数中lapply(x,runif)中的x为一个vector,这样lapply通常会将其强制转化为list

apply

  • 沿着数组的某一维度处理数据
  • 例如:将函数用于矩阵的行和列
  • 虽然与for/while循环的效率相似,但是只用一句话就可以完成
  • apply(参数):apply(数组,维度,函数/函数名)
x<- matrix(1:16,4,4)
apply (x,2,mean)
apply(x,1,mean)
  • 分别运行产生一下代码:
> x
     [,1] [,2] [,3] [,4]
[1,]    1    5    9   13
[2,]    2    6   10   14
[3,]    3    7   11   15
[4,]    4    8   12   16
> apply (x,2,mean)
[1]  2.5  6.5 10.5 14.5
> apply(x,1,mean)
[1]  7  8  9 10

apply

  • 沿着数组的某一维度处理数据
  • 例如:将函数用于矩阵的行和列
  • 虽然与for/while循环的效率相似,但是只用一句话就可以完成
  • apply(参数):apply(数组,维度,函数/函数名)
x<- matrix(1:16,4,4)
apply (x,2,mean)
apply(x,1,mean)
  • 分别运行产生一下代码:
> x
     [,1] [,2] [,3] [,4]
[1,]    1    5    9   13
[2,]    2    6   10   14
[3,]    3    7   11   15
[4,]    4    8   12   16
> apply (x,2,mean)
[1]  2.5  6.5 10.5 14.5
> apply(x,1,mean)]
[1,] -0.6843901 0.1666006 0.6803454
[2,]  1.1253118 0.4653100 0.1141857
> apply(x,c(1,3),mean)
          [,1]        [,2]      [,3]      [,4]
[1,] 1.2045748 -1.53831670 0.3211516 0.2293316
[2,] 0.8996401  0.09853166 1.1504825 0.1244224
> apply(x,c(2,3),mean)
          [,1]       [,2]      [,3]        [,4]
[1,] 0.7023668 -1.4052478 0.6801564  0.90456808
[2,] 1.6055750 -1.0393436 0.7949597 -0.09736984
[3,] 0.8483805  0.2849139 0.7323351 -0.27656733

mapply:

  • lappy的多元版本
  • mapply(参数),mapply(函数/函数名,数据,函数相关参数)
list(rep(1,4),rep(2,3),rep(3,2),rep(4,1))
[[1]]
[1] 1 1 1 1

[[2]]
[1] 2 2 2

[[3]]
[1] 3 3

[[4]]
[1] 4
  • 用mapply完成上面
mapply(rep,1:4,4:1)
  • 自创函数s:
s<- function(n,mean,std)
  • 这个函数中,function用来说明这是一个函数,()中传入需要传入的参数
  • n这里代表从正太分布中随你抽取n个数,mean表示整体分布的均值,std代表这个整体的标准差。
s<- function(n,mean,std){rnorm(n,mean,std)}
s(4,0,1)
mapply(s,1:5,5:1,2)
  • 运行如下:
> mapply(s,1:5,5:1,2)
[[1]]
[1] 1.938297

[[2]]
[1] 4.455111 4.432794

[[3]]
[1] 1.118224 3.751297 5.864922

[[4]]
[1] 4.1675629 1.7385185 0.8987198 0.1048540

[[5]]
[1] -0.3413274  1.2058371 -0.5148753  1.9476646  3.9251892
  • 如果用list表示上面这个则为:
list(s(1,5,2),s(2,4,2),s(3,3,2)...)

tapply

  • 对向量的子集进行操作
  • tapply(参数):tapply(向量,因子/因子列表,函数/函数名)
x<- c(rnorm(5),runif(5),rnorm(5,1))
f<-gl(3,5)
  • gl函数:?gl可自行查看以下
  • rnorm表示正太分布,runif表示均匀分布。
> rnorm
function (n, mean = 0, sd = 1)
>runif
runif(n, min = 0, max = 1)
tapply(x,f,mean)
         1          2          3 
0.08431157 0.36912987 0.92869525 

split

  • 根据因子或因子列表将向量或其他对像分组
  • 通常与lapply一起运用
  • split(参数):split(向量/列表/数据框,因子/因子列表)
split(x,f)
lapply(split(x,f),mean)

排序

  • sort:对向量进行排序,返回排好序的内容
  • order:返回排好序的内容的下标/多个排序标准
wy<-data.frame(v1=1:5,v2=c(10,7,9,6,8),v3=11:15,v4=c(1,1,2,2,1))
sort(wy$v2)
[1]  6  7  8  9 10
sort(wy$v2,decreasing=TRUE)
[1] 10  9  8  7  6
order(wy$v2)
[1] 4 2 5 3 1

wy[order(wy$v2),]
 v1 v2 v3 v4
4  4  6 14  2
2  2  7 12  1
5  5  8 15  1
3  3  9 13  2
1  1 10 11  1
wy[order(wy$v4,wy$v2),]
 v1 v2 v3 v4
2  2  7 12  1
5  5  8 15  1
1  1 10 11  1
4  4  6 14  2
3  3  9 13  2

wy[order(wy$v2,wy$v4),]
 v1 v2 v3 v4
4  4  6 14  2
2  2  7 12  1
5  5  8 15  1
3  3  9 13  2
1  1 10 11  1


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,445评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,889评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,047评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,760评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,745评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,638评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,011评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,669评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,923评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,655评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,740评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,406评论 4 320
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,995评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,961评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,023评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,483评论 2 342

推荐阅读更多精彩内容