1、熟悉语句
- R的赋值符号为<- ,也可以用 =(但是后者不是标准语法,专业人员不推荐使用,但我觉得=更方便,只要打一个字符毕竟 -.-)
回顾:目前已经改过来了哈,使用
<-
为主。快捷键Alt加短横键可一次输出,也很方便。
- 注释由#开头,在它之后的文本都会被忽略(方便打草稿,做记录等等)
x <- rnorm(5) #即创建了一个名为x的向量对象,包含5个来自标准正态分布的随机偏差
2、一些帮助命令
install.packages("vcd")
data() #列出当前已加载包中所含有的所有可用示例数据集
?dplyr #关于该包的简介
??mutate #以mutate为关键词,搜索本地帮助文档
#mutate是dplyr包的一个函数(包首先要加载),帮助栏左上角可以看出。
3、工作空间的管理
- 工作目录(work directory)就是用来读取文件和存储运算结果的默认目录
- 注意:如果需要读入一个不在当前工作目录下的文件,需要调用语句写明完整的路径。记得要加引号!
getwd() #可以查看当前工作目录
setwd('新路径') #可更改工作目录位置
options() #显示当前所有选项
options("repos") #显示某一特定选项 或者 options()$repos
options("repos" = c(CRAN="https://mirrors.tuna.tsinghua.edu.cn/CRAN/"))
options(digits=3)
#修改某一特定选项
history() #默认显示25条历史命令
savehistory("myhist.R") #将历史命令保存名为 mylist 的文件(默认保存至工作目录)
loadhistory("myhist.R") #载入历史命令文件到右上角 history 栏中
#R程序卡住时,点击键ctrl+shfit+esc键,选择你要关闭的程序,结束任务,即可强制关闭程序
save.image("li.RData") #保存工作空间到当前会话中
#相当于快照,除了一般退出可以自动保存,也可自己保存一个时间点的工作状态。
save(objectlist,file="temp.Rdata") #
# object 可以是一个或多个对象,单独保存,而不是整个工作台内容
load("li.RData") #读取一个工作空间到当前会话中
4、图形输出命令
- 一般生成图片则显示在右下角区域,但很多时候需要保存为图片文件。
- R提供很多格式普适的保存图片命令(一些绘图包也提供自己的下载图片函数)
data("mtcars")
#三步走
png("test.png") #第一步
plot(mtcars$mpg,mtcars$cyl) #第二步
dev.off() #第三步
- 此外还有其它很多格式
jpeg("filename.jpg") #输出JPEG文件
bmp("filename.bmp") #输出BMP文件
pdf("filename.pdf") #输出pdf文件,大图推荐
5、关于R包(package)的常用命令
- 储存包的目录称为库(library)
- 使用包的函数之前,先要安装,再要加载
.libPaths() #显示库所在的位置
library() #显示库中有哪些包
search() #显示当前哪些包被加载,可以使用
install.packages("gclus") #安装包,需要加引号
installed.packages() #列出安装的包,版本号、依赖关系等信息
library(gclus) #使用前需要加载包,不用加引号
update.packages() #更新包
6、R的数据
6.1 数据框与因子
- 数据框(data frame)是R中用于常用的存储数据的一种结构:列表示变量,行表示观测。
因子(factor)是名义型变量或有序型变量,他们在R中被特殊的存储和处理
对象(object)是指可以赋值给变量的任何事物,包括向量、数据结构,函数。
patientID <- c(1, 2, 3, 4) #行/实例标识符(行名),可由函数rownames指定
age <- c(25, 34, 28, 52) #连续性变量
diabetes <- c("Type1", "Type2", "Type1", "Type1") #类别/名义型变量,可为因子
status <- c("Poor", "Improved", "Excellent", "Poor") #有序型变量,可为因子
patientdata <- data.frame(patientID, age, diabetes, status)
#创建数据框时,会自动把名义型变量与有序型变量转换为因子,储存为整数型 1、2、3.....
str(patientdata)
str(diabetes) #依然发现仍为字符串型
diabetes=factor(diabetes) #利用factor函数可将字符串转变为因子
如上,将糖尿病类型转换为无序因子类型,如需设置有序型因子,需加ordered =
与levels = c()
两个参数
status=factor(status,ordered = TRUE, levels=c("poor","Improved","Excellent"))
#levels可以覆盖默认排序(字母排序) ,这对按类别绘图时的顺序很关键。
特殊情况:比如性别变量中用数值型变量0、1表示二分类变量;如需编码为因子,要使用levels和label两个参数
补充:让因子的顺序与初始数据的顺序保持一致,可使用unique()
函数,例如f1 <- factor(x1, levels = unique(x1))
gender=c(1,0,0,1,0,1,1,0)
gender <- factor(gender,levels=c(0,1),labels = c("male","female"))
gender
6.2 数据框的取值
patientdata[1:2] #取第一到二列
patientdata[c("diabetes","status")]
patientdata$age
summary(mtcars$mpg)
plot(mtcars$mpg,mtcars$disp) #比较麻烦
## 两个简便方法
attach(mtcars) #tips1 "attach"
summary(mpg)
plot(mpg,disp)
detach(mtcars) #tips2 "with"
with(mtcars,{
print(summary(mpg))
plot(mpg,disp)
})
#删除指定列
patientdata=subset(patientdata,select=-age)
patientdata=patientdata[,-1] #删除第一列
6.3 向量、矩阵、列表
- 向量用于储存数值型、字符型,逻辑型的一维数据。使用
c()
创建
注意:单个向量必须拥有相同的数据类型。
a=c(1,6,15,19)
#向量的取值
a[3]
a[c(3,5)]
a[2:6]
- 矩阵matrix是维数等于2的数组,数据类型也必须一致;这是与data frame表最大的区别。
a=c(1,6,15,19,32,69)
rnames <- c("R1", "R2") #行名
cnames <- c("C1", "C2", "C3") #列名
mymatrix <- matrix(a, nrow=2, ncol=3, byrow=TRUE,
dimnames=list(rnames, cnames))
#byrow=TRUE 按行填充,默认为按列填充。
#取值
mymatrix[2,] #取第二行
mymatrix[,3] #取第三列
mymatrix[2,3]
mymatrix[2,c(2,3)]
mymatrix[c(T,F),4] #默认循环
mymatrix[,c(T,T,F,F,F)] # 在大数据时,会比较方便
mymatrix[,c(T,F)]
- 列表(list)为一些对象的有序集合,可能是若干向量、矩阵,数据框,甚至其它列表的组合。
#建立列表
mylist <- list(a,b,c,d) #可为任何数据类型
mylist
mylist[[2]] #取列表中第二个对象
#灵活创建--为列表元素命名
mylist <- list(title = a,b,c,end = d)
mylist
#可按名寻对象
mylist[["title"]] #mytitle[[1]]
mylist$title #仅对命名的元素有效
注意列表的取子集方式,
list[1]
提取的本质还是一个列表;而list[[1]]
这种方式会从列表中删除一个层次等级,使用$
按名提取也是同样的效果。这个区别很重要~
7、数据导入与初探索
1、 手动输入,适用于小数据输入
mydata <- data.frame()
mydata <- edit(mydata)
#fix(mydata)
2、 read.table()
将带分隔符的文本文件(如逗号为分隔符的CSV文件)转为dataframe格式数据表,从而导入到R中。
mydata=read.table("file.csv",header=TRUE,
row.names="nameID",sep=",")
#header=TRUE,表示第一行为列名
#row.names 设置行名;此外col.names也可以单独设置
#修改列名,直接赋值即可
colnames(mydata)=c('Geneid','A1','A2','A3','B1','B2','B3')
分隔符默认为
sep=" "
,代表一个/多个空格,制表符,换行或回车;
sep="\t"
读取使用制表符来分割行内数据
read.table()
函数其它常用参数
-
stringsAsFactors
表示字符型向量是否转化为因子,默认是TRUE。处理大数据设置为FALSE便捷 -
skip
用于数据前跳过的行的数目,适用于开头有注释的文件。 -
na.strings
将特定字符转为na值,例如na.strings=c("9","?")
-
?read.table
可知还有read.csv
等更便捷、直接的方法; - 导入excel文件,推荐方式为将excel文件另存为csv文件,再按上述方法导入。
- 其它方法或导入其它数据目前对于我不常用,不做介绍 P35
补充:相反的,也可把R中的数据框或者矩阵等导出为CSV、excel等格式,方法示例如下:
#导出逗号分隔符(csv)文本文件
write.table(mydata, "mydata.txt", sep=",")
# 默认字符串放在引号中的,缺失值用NA表示
#导出excel
#注意该包应该是需要Java环境,因此需要电脑下载安装jdk
library(xlsx)
write.xlsx(mydata, "mydata.xlsx")
# 默认变量名为电子表格头部,行名放在第一列
补充两点:
(1)excel目前有两种常见后缀.xls
和.xlsx
。可以简单理解后者是前者的升级版。.xls
在所有版本office都能打开,而.xlsx
只能在2007年以后版本的office才能打开;
(2)一般保存,建议逗号分隔符的.csv
格式;而如果是别人给的数据是excel文件,推荐使用readxl
R包读取,主要用到三个函数read_excel()
、read_xls()
、read_xlsx()
3、使用的数据初探索函数
length() #显示元素数量
dim() #维度
str() #结构
class() #类型
head() #前六行,tail则为后六行
ls() #显示当前对象列表
rm(list=ls()) #清空所有对象
寒假自学R语言的生信小白
教材参考《R语言实战(第2版)》