R 语言学习分享


R 语言学习分享 (以下涉及到争论的观点均为个人观点,不同意者甚多,不在乎再多些,请不要鸟我。以下介绍均在 terminal 上进行,窗口形式的帮助请上网查找。这里只介绍生物信息中最常用的命令格式) R 语言是用来做数据处理,统计分析,简易制图的;文本处理请学习 perl,大型计算请问人,慢走不送。 R 语言是开源免费的,且很多生物信息学的程序是用 R 语言实现并面向大众的。 R 语言的基础语法结构却比较混乱,文法不统一,适合用,不适合特意学。matlab 在这点上要好很多。 下载 R: http://cran.r-project.org/ 1 基础: google google 是万能的!信 google 得永生! help(sth) 帮助,help(rm)即可显示”rm”此命令的帮助文档,terminal 下是用 less 打开的,退出 帮助文档按 q; ?sth: 同上,简单多了,推荐; ls(): 显示当前工作目录下的变量,推荐; summary(sth) 简单总结 sth 的各项属性,一般是统计概要或者是其中元素的长度,个数等。推荐; install.packages(“sth”) 安装一个名为 sth 的 package,注意加引号。 library(“sth”) 加载一个名为 sth 的 package,注意加引号。 q() 退出 R。同 Ctrl+z;这时会弹出一个对话”save workspace image? [y/n/c]” y: 退出并保 存;n: 退出不保存;c: 取消退出这一操作。 推荐先自己保存,然后 q(), 然后选 n; save.image() 简单地将当前工作区间所有变量保存在一个名为“.RData”的文件中,如果 q() 后选择 y, 就执行这一函数,保存你的工作区间所有变量。而且你的当前目录下有一个名为“.RData” 的文件的话,打开 R 之后,R 自动加载这个文件,恢复你的上次结束时的工作区间。可以 使用 ls -a 命令来查看是否存在这一文件;不推荐 save() 保存。save(A,B,C,...,file=”your output file name”) 将工作区间中的变量 A,B,C...保存到 以”your output file name”为名的文件中,这个文件可以是.RData 为后缀,也可以不用后 缀。 save(list=ls(all=TRUE),file=”your output file name”) 将工作区间中的所有变量 保存到以”your output file name”为名的文件中。推荐 save.image()等同于 save(list=ls(all=TRUE),file=”.RData”) load() 加载由 save 得到的存档。推荐; 2 I/O: read.table() 读取文件并将其创建成 data.frame 格式。一般这么用: my_data<-read.table(file=”yourfile”,sep=”\t”,header=TRUE); 其中,file 可以包含路径, 如 file=”/data/hulong/R_test/yourfile”;sep 是分割符,默认为任意空白符,如\t 等; header 指是否读取第一行作为列标题。推荐; print() 显示在输出端,一般是屏幕上。由于 R 是没有 debug 模式的,所以要测试时,一般多写几 个 print(),以监视进程 write.table() 将 data.frame 写到一个文件中。一般这么用: write.table(x,file=”yourfile”,sep=”\t”,append=FALSE,quote=TRUE);其中,x 是你想 要输出的结果,可以是 matrix,list,但都会自动被转化为 data.frame 格式,file 和 sep 同上,append 为是否在当前打开的文件(就是 yourfile)后面接着写入,默认是 FALSE, quote 指是否将 data.frame 里的 character 和 factor 用双引号包围。默认是 TRUE,但我 一般设为 FALSE。推荐; 3 数据类型 3-1 向量: c() 创建向量 x<-c(1,22,3); y<-c(“lala”,”baba”,”blabla”); 向量索引 向量只有一维!x[2]是 22,但 x[2,1]是 error;y[c(1,2)]是 “lala”,”baba”;x[-c(1,2)]是 3 from:to 创建以 1 或-1 为差的等差数列 1:5 就是 1,2,3,4,5; 5:1 就是 5,4,3,2,1。只能是以 1 或-1 为步长!一般在 for 语句中作控制,如 for(i in 1:5){...} seq() 等间隔函数 seq(from=value1,to=value2,by=value3)就是从 value1 开始,以 by 为间隔, 到 value2 还有一种用法 seq(from=value1,length=value2,by=value3),从 value1 开始, 以 by 为间隔,生成长度为 length 的向量 seq(from=3,length=4,by=1)即得到 3,4,5,6 rep(x,times) 重复向量多次,x<-c(1,3,5),rep(x,times=2)就是 1,3,5,1,3,5。rep(x,each=2)就是 1,1,3,3,5,5。x 可以是矩阵,list,factor...但都会被转化为 vector 后重复。如 x=[ 1,2 3,4] rep(x,times=2)就是 1,3,2,4,1,3,2,4。所以实用性很低,不推荐 3-2 矩阵: matrix() 创建矩阵。matrix(x,nrow=,ncol=,byrow=FALSE)创建由 x 组成的 nrow 行,ncol 列的 矩阵。如 matirx1<-matrix(0,nrow=2,ncol=3), matirx1 就是 [ 0 0 0 0 0 0] matrix2<-matrix(1:2,nrow=2,ncol=3) matrix2 就是[ 1 1 1 2 2 2] 这是因为 1:2 只有两个元素长度,不够 2x3 的矩阵,R 就会自动重复 matrix3<-matrix(1:6,nrow=2,ncol=3) matrix3 就是[ 1 3 5 2 4 6] 如大家所见,矩阵给元素排序是按照列来排的,这是因为默认 byrow=FALSE 推荐 矩阵索引 matrix3[i,j] matrix3 的 i 行,j 列;matrix3[i,] i 行;matrix3[,j] j 列;matrix3[,c(j1,j2)] matrix3 的 j1 行和 j2 行; matrix3[c(-i1,i2),] matrix3 的除了 i1 和 i2 行以外的所有行; nrow(),ncol() 返回维数信息,nrow(x)是 x 的行数,ncol(x)是 x 的列数。推荐 dimnames(x) 设置 x 的维数名字 dimnames(x)<-list(c(“row1”,”row2”...),c(“col1”,”col2”,...));我喜欢 用 rownames(x)<-c(“row1”,”row2”,...); colnames(x)<-c(“col1”,”col2”,...); rbind(),cbind() 以行或列的形式组合矩阵.rbind(x,y),x 和 y 须有相同列数,生成 [x y] cbind(w,z),w 和 z 须有相同行数,生成[w,z]。 推荐 dim() 重新设置矩阵的维数,相当于变形。 apply() R 里执行循环是比较低效率的,所以对于矩阵类型和下面讲到的 data.frame 类型数据可以 使用 apply()函数来减少循环。apply(matrix3,margin,fun) matrix3 是你要处理的矩阵, margin 是固定某一维不变,并对这一维进行 fun 的操作。比如 apply(matrix3,1,sum)得 到: 9,12; apply(matrix3,2,mean) 得到:1.5 3.5 5.5 推荐 3-3 因子 factor: 说白了,因子就是一种离散变量,如 0 和 1; low, median, high; 0,1.1,2.2,3.3,4.4,5.5 table() 统计各类数据的频数 table(x),或生成 confusion matrix : table(x1,x2) 3-4 列表 list: 列表是一种十分宽松的数据结构,可以存储不同类型的对象,不同长度的对象在一个列表 里,因此十分适合作为一个总结性的结果呈现。比如 R 里面的函数,其输出只能是最后一 行代码里的结果,那如果想要输出多个结果,就必须使用 list 来输出 list() 生成一个列表。一般这么用,首先,list1=list(); 这时就生成了一个空白列表,然后,就可 以给这个 list1 赋值。比如有 3 个结果。out1=c(1,3,5), out2=TRUE, out3=”I'm the king of the world”, 就可以 list1=list(name1=out1,name2=out2,name3=out3); 或者, list1[[1]]<-out1;list1[[2]]<-out2;list1[[3]]<-out3; list 的引用 可以使用下标,如 list1[[2]] 就是刚才的 out2,list1[2]是一个包含了 out2 的子列表, 也可以使用名字,如 list1$name1 就是 out1 list 的删除元素 将相应的元素赋值为 NULL 即可 list 的连接 可以使用函数 c()连接,如 listABC<-c(listA,listB,listC) 3-5 数据框 data.frame: data.frame 可以视作一种推广了的矩阵,其各列可以是不同的数据类型,如第一列可以是 字符串,第二列可以是数值,是一种十分好用的格式。基本上矩阵能使用的函数, data.frame 都可以使用 data.frame 的索引 继承了矩阵索引的所有,还可以使用 data.frame$name 的格式 3-6 数据类型之间判断转化 is.sth(x) is.na(x),判断 x 是否是缺失数据(缺失数据一般用 NA 表示) is.nan(x)判断 x 是否是不确定数据 (不确定数据一般用 NaN 表示,如 0/0) is.finite(x)判断 x 是否是有限的 is.infinite(x)判断 x 是否是无穷的,如 1/0 is.null(x)判断 x 是否是 NULL is.numeric(x)判断 x 是否是数字类型 is.character(x)判断 x 是否是字符型 。。。。使用 methods(is)可以看到所有的 is.sth 函数 as.sth(x) 转化 x 为 sth 类型,如 as.data.frame(matrix1)将 matrix1 转化为 data.frame 格式。 使用 methods(as)查看所有类型的 as names(x) 查看或设定 x 的 names,很常用,如果你得到一个 obj,不知道是什么,可以尝试 names(obj)。而设定一个对象的名字就更常用了。推荐 attributes(x) 得到或设置 x 的属性列表 class(x) 得到或设置 x 的类型 4 数据选择操作 which(exp(x)) 得到满足关于 x 的 exp 的条件的 x 的索引,比如 x<-c(1,2,3), which(x==3)返回 3; which(x==0)返回 integer(0), which(x==min(x))返回 1。推荐 sample(x,size,replace=FALSE) 随机不放回的在向量 x 中抽取 size 个元素。一般想在某个数据集中随机 不放回抽样,就这样写 out_index<-sample(1:length(inputvector),size,replace=FALSE) out_vector<-inputvector(out_index)。默认是不放回抽样的,如果想要放回抽样,设置 replace=TRUE sort(x,decreasing=FALSE) 对 x 升序排序,如果 decreasing=TRUE, 则降序。x 如果是矩阵,就默 认按照矩阵的第一列来排序。因此不是很好用。 order(x,decreasing=FALSE) order 函数返回的是 x 的排序后的索引,因此要完成排序可以这样写: descending_data<-data[order(data$name,decreasing=T),];(这是一个数据框,对名为 n ame 的那一列排序) descending_data<-data[order(data[,j],decreasing=T),];(这是一个矩阵,对第 j 列排 序)推荐 unique(x) 返回 x 中的唯一值 x<-c(1,2,3,4,5,2,3), unique(x)返回 1,2,3,4,5 +, -, *, /, ^, %%, %/% 加,减,乘,除 , 乘方,求余(5%%3 为 2),整数除法(5%/%3 为 1) <, >, <=, >=, ==, !=, &&, || sin, cos, tan, asin,acos,atan, exp max, min, sum(), mean(),abs()绝对值,mean(), median()中位数,var()方差, sd()标准差, log(x,base) 计算以 base 为底的对数,默认为 e,但用的时候自己设一下会比较好 round(x,n) 对 x 取约数,n 为小数点后几位。如 round(3.123456, 3)为 3.123 scale(x) 对 x 做标准化和中心化 intersect(x,y) 取 x 和 y 的交集,x 和 y 一般是向量。 merge(x,y) 将两个 data.frame 合并。一般要求 x 和 y 有一列是共同的名字 merge(x,y,by.x=..,by.y=..) strsplit(str,split) 将字符串 str 在 split 的位置切割开.比如,str<-”haha_hi_agc”,strsplit(str,”_”)得到 “haha”,“hi”,“agc” gsub(pattern,replacement,str) 将 str 中的 pattern 全部替换为 replacement。sub()函数只替换第一次 paste(...,sep) 转化为字符串后以 sep 连接起来。比如,paste(str1,87,str2,str3,sep=”_”)得到 str1_87_str2_str3 tolower() toupper() 转化为小写/大写 5 编程 my_func_name<-function(arg1,arg2,....){ statements; } 自定义函数。返回值为函数体里最后一行。要返回多个值,使用 list() R 是由上至下执行的,因此一个子函数要想使用,必须写在主函数之上! 如果写在一个单独的文件里,如果要使用,需要先 source(path/Rfile); if (exp){ statement1; }else{ statement2; } 注意 else 必须紧跟在高亮的那个花括号之后,不可以有空格之类的任何东西。else 可以省 略 for(var in vector){ statement; break; next; } break 跳出循环,next 调到下个循环 6 图形 png() 创建并打开一个 png 文件,在 dev.off()函数出现之前,所作图都会显示在这个 png 文件里 png(filename=”blabla.png”,width=480,height=480,...) dev.off() 关闭当前图形 7 统计
还剩4页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 5 金币 [ 分享pdf获得金币 ] 2 人已下载

下载pdf

pdf贡献者

260263219

贡献于2014-06-25

下载需要 5 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf