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):只能包含同一类型的对像
- 创建向量:
- vector()
- c() 说明:使用c()函数,如果其中一个元素是字符,则非字符值强制为字符类型。
- 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