当前位置: 首页 > news >正文

湛江网站建设皆选小罗23公司官网登录入口

湛江网站建设皆选小罗23,公司官网登录入口,网站建设平台 汉龙,优化大师官网文章目录 R语言预备知识获取工作目录设置工作目录注释变量名的命名赋值变量的显示查看与清除变量函数帮助文档查询函数安装R包文件的读取文件的输出软件的退出与保存 R语言语法向量向量的创建向量的索引#xff08;向量元素的提取、删除、添加#xff09;向量长度的获取向量的… 文章目录 R语言预备知识获取工作目录设置工作目录注释变量名的命名赋值变量的显示查看与清除变量函数帮助文档查询函数安装R包文件的读取文件的输出软件的退出与保存 R语言语法向量向量的创建向量的索引向量元素的提取、删除、添加向量长度的获取向量的注意要点向量的计算向量的相关函数部分NA与NULL值向量元素的筛选向量相等数据结构的查看控制语句 矩阵矩阵的创建矩阵的索引矩阵相关操作及相关函数部分apply()函数数据结构的查看 列表列表的创建声明列表标签或者对象名的命名删除标签列表元素的索引列表元素的增减获取标签解除列表列表相关函数部分 数据框数据框的创建数据框的索引数据框行列名的获取与更改数据框元素的增减数据框相关函数 因子和表因子的创建因子的索引因子的修改因子常用函数表 字符串字符串操作的常见函数正则表达式 数学运算与模拟R语言画图plot函数1.图片的保存2.par()函数图布局3.main :设置主标题sub:副标题4.type,指线的类型5.pch : 指定绘制点时使用的符号6.cex : 指定符号的大小默认是17.lty:指定绘制线条时的类型lwd:指定线条粗细8.坐标轴标签9.坐标轴范围10.字体设置11.title()函数12.abline()函数添加线13.lines()函数在现有图形上添加线14.layout()函数图布局15.添加图例16.在图上添加文字17.R的撤销图片操作****************** 本文为生信初学者在学习完R语言后整理的知识点及学习方法与个人观点方便需要的同志学习使用生信或其他医学相关专业欢迎各位大佬进行指点批评有错误或者有不同观点可在评论区留言。 更新时间2023年3月21号 声明本文仅为学习笔记和实例记录可供参考。 本文知乎地址R语言基础入门学习笔记通俗易懂版 建议使用CSDN因为代码有高亮 软件工具R与Rstudio先安装R再安装Rstudio。软件工具不过多介绍安装方法可以参考在CSDN上各大佬的方法。本文代码为Rstudio中R软件框中的Rstudio左下角框的如下图代码与结果便于直观展示。建议使用电脑浏览本文代码因为部分代码好长 R语言预备知识 获取工作目录 使用getwd()函数获取当前工作目录作用是查看当前工作目录在哪一个具体位置C盘或者是其他,第一次使用可能会出现警告但是也可以看到工作目录你可以在运行一次代码如下 getwd() [1] C:/Users/橙/Documents Warning message: In normalizePath(path.expand(path), winslash, mustWork) :path[1]C:/Users/?/Documents: 文件名、目录名或卷标语法不正确。getwd() [1] C:/Users/橙/Documents设置工作目录 使用setwd()函数更改当前目录把工作目录更改到你存放你需要使用的数据包的那个位置更便于直接重工作目录中读取否者需要使用全路径。在使用函数是需要几点注意请看以下代码 setwd(F:\R.cx)#工作目录的地址需要用双引号括起来注意斜杠这种单斜杠会报错 Error: \R is an unrecognized escape in character string starting F:\Rsetwd(F:/R.cx)#这种单斜杠可以能运行setwd(F://R.cx)#这行与下一行的双斜杠都行setwd(F:\\R.cx)注释 R语言的注释使用#号写代码一定要常写注释不然时间久了会忘记某代码的作用便于后续操作。在Rstudio中可以使用CtrlshiftC经行多行注释。 变量名的命名 与其他语言的变量名命名差不多主要要注意数字不能开头%号是非法字符不可以用来命名.号后面不可以跟数字不可以下划线开头。变量名可以为与你操作相关的名字命名如我要对一行身高的数据求均值 higth-c(175,169,179,175,180,183) higth_mean-mean(higth)#对身高求均值赋值 R语言的赋值方式与其他语言有点区别有三种分别是左箭头-键-键等号左边的那个不要按Shift等号右箭头-如 a-2b3c-4 #注意右箭头使用方法被赋值的应该在右边简单点说就是某某赋值给谁箭头就指向谁 Error in 4 - c : invalid (do_set) left-hand side to assignment4-ca #键盘敲出变量名回车后就会显示结果 [1] 2b [1] 3c [1] 4变量的显示 1.命令行直接输入变量名 2.利用print()函数如下 a-2a #命令行直接输入变量名 [1] 2print(a) #利用print()函数 [1] 2查看与清除变量 查看变量ls() 清除指定变量rm() 清除所有变量rm(listls()) 如下 ls() #查看变量这个函数是查看所有已定义的变量输出所有变量名 [1] a b crm(a) #清除变量arm(listls()) #清除所有变量函数帮助文档查询 当遇到一个函数不会用时可以使用帮助文档查询结果会在Rstudio的右下角框里显示方法有三种 1.?要查询的函数 2.使用help()函数查询 3.使用example()函数查询 我以求和函数sum()为例 ?sumhelp(sum)example(sum)函数 R中含有大量的函数比如求和函数sum()求均值mean()等直接可以拿来使用的函数但是往往在实际操作过程中因为需求不同需要自己写函数就是自定义函数类似于C或C中的自定义函数我们来看一下R中如何自定义函数,请看如下代码 #函数名-function(){·······}f-function(a,b) #写一个求和函数,function()是固定格式{k-abreturn(k) #返回结果为k如果没有设置返回值则函数会返回最后一行执行的结果}f(3,4) #使用函数名加一个括号调用函数 [1] 7 注函数可以套函数使用 输出函数 print()函数输出与C语言中的printf()函数作用一样 print(5) [1] 5安装R包 安装R包需要使用install.packages()或者BiocManager::install()函数安装library()函数调用以安装openxlsx为例如下 #安装R包代码如下 install.packages(“openxlsx”) #或BiocManager::install(“openxlsx”) library(openxlsx) 文件的读取 有多个函数可以读取文件一下介绍几种常用的 scan()函数 scan(file “”, what double(), nmax -1, n -1, sep “ ”)file 的双引号里写文件地址what写读入的数据类型如果文件有好几种类型可以啥也不写what sep表示文件中数据的分隔符。举例如下 #我桌面上有一个txt文件数字、字符都有元素间隔为空格scan(fileC://Users//橙//Desktop//juli.txt,what ,sep ) Read 6 items [1] 1 2 2 3 你干嘛 [6] 哎呦~readline()函数 从键盘中读入一行数据举例如下 duru2-readline() Hello Worlduru2 [1] Hello Worlduru3-readline(请输入) #请输入是提示语,可以自定义 请输入喝为什么不喝,他奈奈滴duru3 [1] \喝为什么不喝,他奈奈滴\readLines()函数 可以一次性读取整个文件,可以限制读取的行数举例如下 #返回结果会出现警告原因是读取的文件每一行后包括最后一行必须包括换行符我这个文件无readLines(C://Users//橙//Desktop//juli.txt) [1] 1 2 2 3 你干嘛 哎呦~ 我滴任务完成啦 [3] 你坤哥厉不厉害 Warning message: In readLines(C://Users//橙//Desktop//juli.txt) :incomplete final line found on C://Users//橙//Desktop//juli.txt#n2表示读取前两行因为第二行有换行符所以不会出警告readLines(C://Users//橙//Desktop//juli.txt,n2) [1] 1 2 2 3 你干嘛 哎呦~ 我滴任务完成啦 read.table()函数 这个函数对于医学专业学生来讲十分重要主要用于读取矩阵数据框文件(可以读取.xlsx格式文件) read.table(file, header FALSE, sep “”, quote “”,dec “.”, numerals c(“allow.loss”, “warn.loss”, “no.loss”),row.names, col.names, as.is !stringsAsFactorsna.strings “NA”, colClasses NA, nrows -1,skip 0, check.names TRUE, fill !blank.lines.skip,strip.white FALSE, blank.lines.skip TRUE,comment.char “#”,allowEscapes FALSE, flush FALSE,stringsAsFactors FALSE,fileEncoding “”, encoding “unknown”, text, skipNul FALSE) file文件名包在 内或使用一个字符型变量可能需要全部路径注意即使是在Windows下符号\也不允许包含在内必须使用/替换或者一个URL链接http://···(用UPL对文件远程访问)header一个逻辑值FALSE,TRUE用来反映这个文件的第一行是否包含变量名sep文件中的字段分离符例如对用制表符的文件使用sep“\t”quote指定用于包围字符型数据的字符dec用来表示小数点的字符row.names保存着行名的向量或文件中的一个变量的序号或名字缺省时行号取为123····col.names指定列名的字符型的向量缺省值是v1,v2,v3····as.is控制字符型向量是否转化为因子型变量如果值为FALSE或者仍将其保留为字符型TRUE。as.is可以是逻辑值数值型或者字符型向量用来判断变量是否保留为字符na.strings代表缺失数据的值(转化为NA)colClasses指定各列的数据类型的一个字符型向量nrows可以读取的最大行数忽略负值skip在读取行数据前跳过的行数check.names如果为TRUE则检查变量名是否在R中有效fill如果为TRUE且非所有的行中变量数目相同则用空白补齐······ read.xlsx()函数 读入.xlsx文件使用该函数需要安装openxlsx包。 文件的输出 write.table()函数参数与read.table()对应 write(Hello,wrold,C://Users//橙//Desktop//juli.txt)cat()函数举例如下 cat(hello wrold,fileC://Users//橙//Desktop//juli.txt,appendT)#追加写入里面有内容cat(hello wrold,fileC://Users//橙//Desktop//juli1.txt) #覆盖写入里面的内容被覆盖了软件的退出与保存 1.可以直接输入q()函数也可以右上角直接叉掉后根据提示操作 2.当写完一个文件时可以点击保存按钮根据提示选择保存位置文件后缀有多种看你保存哪种文件有.R、.Rdata等后缀.R一般是保存代码的.Rdata是保存处理后的数据的。 保存数据 可以使用**save()**函数可以保存多种格式的文件 save(b,filexxx.Rdata) #保存b,文件是xxx格式为.Rdatasave(b,c,filexxx.Rdata) #保存b,c,文件是xxx格式为.Rdatasave.image(xxx.Rdata) #保存所有你定义的所有变量及数据文件是xxx格式为.RdataR语言语法 向量 向量(vector)是R语言的最基本的数据类型、R语言的核心、R语言中的战斗机 向量是用于存储数值型、字符型或逻辑型数据的一维结构。 向量的创建 1.可以使用c()创建一个向量如 a-c(1,2,3,4,5) #存储的数据是数值型直接用逗号隔开a-c(1:5) #与第一行代码意思是一样的因为是连续的所以用15表示1到5的五个数b-c(R,Rstudio) #储存的是字符型数据字符型的数据要加双引号c-c(TRUE,FALSE,T,F) #储存的数据是逻辑型的TRUE与T是一样的T是TRUE的简写F是FALSE的简写2.可以用vector()函数建立一个空向量如 d-vector(length10) #建立了一个名字为d的空向量长度为10d #我们看一下d里的内容发现全部为FALSE可以理解为空向量里值都为FALSE[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE[9] FALSE FALSE向量的索引向量元素的提取、删除、添加 我们有一个向量后我想知道里面第几个第几个的内容我们可以使用中括号[]进行索引。如 a-c(1,2,3,4,5) #我这里有一个向量aa[2] #我查看a中第2个元素返回结果为2 [1] 2a[4] #我查看a中第4个元素返回结果是4 [1] 4a[c(1,3)] #我查看a中第1和第3个元素可以使用向量的方式一次查看多个 [1] 1 3c-c(TRUE,FALSE,T,F,F) #当然还有骚操作这里有一个逻辑型向量c,我们试试用a索引它a[c] #结果可以看到返回的是TRUE对应位置的元素这个操作我不知道教材上有没有这是我意外摸索出来的 [1] 1 3以上讲的是查看某元素在实际中会遇到更改或删除某些元素 1.向量中元素的更改直接进行索引赋值如下 a-c(1,2,3,4,5) #这里有一个向量a没错又是它它又来了这个阿婆主真没技术含量(叹气)a[2]-4 #a中第二个元素改为4a #看一下a中的元素唉~~没错它变了(窃喜) [1] 1 4 3 4 5a[c(1,5)]-7 #我把a中的第1和第5改为7a #再次看一下 [1] 7 4 3 4 72.向量中元素的删除 上面讲到索引是用[]里面写上元素位置位置是数字正的那么是负的会怎样呢嗯没错负数 索引是查看删除那个位置后的结果注意单纯的负索引出来的结果是没有改变原向量的我们需要重新赋值给它一个新的变量名不用新的也行但会把原来的覆盖掉废话不多说直接看如下代码 a #没错又用了上面个那个向量aup真没创意(梆梆给阿婆主两拳) [1] 7 4 3 4 7a[-2] #我负索引以下第2个位置返回的结果与a的区别是把第2位删掉了 [1] 7 3 4 7a #我们在看一下a返回结果尽然没有把第2为删掉那怎么办那就给他一个新的名字吧 [1] 7 4 3 4 7e-a[-2] #既然a[-2]返回的结果是我需要的那么直接给他一个新名字吧让一个东西去接收它e #上面我们用了e去接受我们需要的我们看一下是否赋值到了运行这行代码后发现结果是我想要的 [1] 7 3 4 7a-a[-2] #为啥要重新弄个新的变量名呢用a不可以吗肯定可以呀俺敲着这行代码试一下(自信)a #查看一下a对的是我想要的(满意)······(十分钟后)我原本的a呢啊~~救命被我覆盖掉了(螺旋升天) [1] 7 3 4 7 #所以不要轻易覆盖掉原来的变量万一后面要用到呢#升级以下看看能不能用向量一次性多删几个a-c(1,2,3,4,5) #这里我又用了原向量a上面的向量a太短了f1-a[c(-1,-3)] f1 #结果是可以的 [1] 2 4 5f2-a[-c(1,3)] #上面f1是把负号放在向量里面放外面其实也是可以的耶f2 [1] 2 4 5#突发奇想如果a[]中括号里面的向量里面与外面都有负号呢试一试f3-a[-c(-1,-3)] f3 #f3的结果显示第1位与第3位的元素嗯~~那就可以理解为负负得正直接把a中的第1和3位赋值给f3 [1] 1 3f4-a[-c(-1,3)] #脑子抽风了这种行不行呢哈它报错对的报错了那就不可以咯 Error in a[-c(-1, 3)] : only 0s may be mixed with negative subscripts3.向量元素的添加 上面我们提到了向量元素的索引与元素的删除那能不能加元素进去呢答案肯定是能得那么如何加入元素呢这就要用到向量的素引了看如下代码与注释 a-1:5 #这里有一个向量a我想在第2与第3个位置上加上一个元素6如下g1-c(a[1:2],6,a[3:5]) #这中方法结果是可行的可以理解为把a分为两部分中间插一个6g1 [1] 1 2 6 3 4 5g2-c(a[1:2],7,9,10,a[3:5]) #多插如几个都是可以的g2 [1] 1 2 7 9 10 3 4 5#当然比较短的向量就可以重新写一个但是如果有几万个上面的方法是很不错的向量长度的获取 我有一个非常长的向量我并不知道它的长度我们可以使用length()函数获取向量长度如下代码 a1-99:10058 length(a1) #运行函数后返回了向量a1的长度 [1] 9960向量的注意要点 向量在使用之前需要进行声明声明主要有两种 1.变量名-c(········)变量名与向量元素同时确定如 a-c(1,2,4,5,7,8) #使用了c(····)的形式a就默认为一个向量2.直接创建一个空向量后赋值如 b-vector(length5) #建立一个名字为b长度为5的空向量b[3]-6 #第3位元素赋值为6b #查看结果可以看到第三位是6其他为0因为之前提到过空向量里的值都为FALSE [1] 0 0 6 0 0 #当里面出现数值时其他位置的FALSE变为数字0还需注意向量元素的类型 如何判断一个变量类型呢我们可以使用mode()函数查看变量类型或者使用typeof()函数 1.当向量元素同时含有数值与字符型时返回的结果为字符型数值型转变为了字符型在后续处理数据时需要注意只要出现了字符型元素则此向量应当作字符型向量处理如下 c-c(1,3,ABC) mode(c) #查看一下c是什么类型的数据返回结果是字符型 [1] characterc [1] 1 3 ABC 2.当向量元素同时含有数值型与逻辑型时返回结果为数值型逻辑性转变为数值型其中FALSE转变为0TRUE转变为1。如 c1-c(1,5,FALSE,TRUE)mode(c1) #查看一下c是什么类型的数据返回结果是数值型 [1] numericc1 [1] 1 5 0 13.当向量同时含有数值型、逻辑型与字符型时全部转变为字符型如 c2-c(1,5,FALSE,TRUE,ABC)mode(c2) #查看一下c2是什么类型的数据返回结果是字符型 [1] characterc2 [1] 1 5 FALSE TRUE ABC 总结逻辑性可以转化为数值型与字符型数值型可以转化为字符型注意字符型不可以转换为逻辑与数值型 as.数据类型()可以进行强制转换,如下 c1-c(1,5,FALSE,TRUE)as.character(c1) #将c1强制转换为字符型 [1] 1 5 0 1as.numeric(c1) #将c1强制转换为数值型 [1] 1 5 0 1向量的计算 1.向量的循环补齐使用向量相加的例子举例相加与相减类似如 c(3,4)c(8,9) #83119413这是两个向量长度相同的 [1] 11 13c(2,4)c(2,3,4,5,6) #2234425462能算但长度不相同的会出现警告 [1] 4 7 6 9 8 Warning message: In c(2, 4) c(2, 3, 4, 5, 6) :longer object length is not a multiple of shorter object length2.向量相乘使用*号。长度相同时两向量对应元素相乘但长度不同时会出现警告会使用向量循环补齐的方式计算如下 c(1,3)*c(3,5) #长度相同对应元素相乘3×15×3 [1] 3 15c(1,3,5)*c(2,4,7,8,10) #长度不同补齐方式计算2×14×37×58×110×3 [1] 2 12 35 8 30 Warning message: In c(1, 3, 5) * c(2, 4, 7, 8,10) :longer object length is not a multiple of shorter object length 3.向量取余使用%%,长度相同时对应元素取余长度不同时出现警告循环补齐式取余请看如下代码 c(1,3)%%c(5,9) #1÷5余13÷9余3长度相同对应元素取余 [1] 1 3c(5,9)%%c(1,3) #5÷1余09÷3余0长度相同对应元素取余 [1] 0 0c(1,3,10)%%c(2,4,5,8,3) #长度不同1÷2余13÷4余310÷5余01÷8余13÷3余0 [1] 1 3 0 1 0 Warning message: In c(1, 3, 10)%%c(2, 4, 5, 8, 3) :longer object length is not a multiple of shorter object length向量的相关函数部分 与向量相关的函数有很多不一一介绍介绍几个比较简单常用的 1.seq()函数 seq(from,to,by), 从什么到什么间隔by为多少等差数列公差就是by的值 seq(from,to,length.out),从什么到什么长度为多少详情看如下代码 seq(from3,to12,by3) #从3到12间隔(公差)为3 [1] 3 6 9 12seq(3,12,3) #fromto by 可以不写默认 [1] 3 6 9 12seq(from3,to12,length.out6) #从3到12长度为6 [1] 3.0 4.8 6.6 8.4 10.2 12.02.rep() 函数 rep(x,time)x重复time次rep是重复repeat的简写 rep(x,each)每个连续重复each次详情如下 x-c(1,3) rep(x,time2) #重复两次整体x [1] 1 3 1 3rep(x,each2) #x里的元素每一个重复两次 [1] 1 1 3 3rep(x,2) #既不写time也不写each默认为time [1] 1 3 1 33.all()、any() 与match()函数 all()判断元素是否都符合条件返回逻辑值 只要有一个不满足返回FALSE看如下代码 ang()判断是否有元素满足条件返回逻辑值只要有一个满足返回TRUE如下代码 a #我用向量a举例子 [1] 1 2 3 4 5all(a0) #判断a里的元素是否都大于0返回了TRUE [1] TRUEall(a3) #判断a里的元素是否都大于3,返回了FALSE [1] FALSEany(a4) #判断a中是否有大于4的元素返回了TRUE [1] TRUEany(a6) #判断a中是否有大于6的元素返回了FALSE [1] FALSEmatch()意为匹配的意思例如match(A,B),判断向量A的元素在向量B里是否有若有则返回在B中的位置若没有则返回NA两向量长度不等时循环补齐时判断要注意时哪一个向量要循环请看如下代码 match(c(1,4,5),c(2,4,3)) #两向量长度相同第二个是相同的返回相同的位置其他返回NA [1] NA 2 NAmatch(c(1,4,5),c(2,4)) #长度不等1与2判断4与4判断5与2判断 [1] NA 2 NAmatch(c(1,4),c(2,4,3)) #长度不等1与2判断4与4判断第一个元素都判断完了直接结束返回结果 [1] NA 2match(c(1,4,5,6,2,4),c(2,4)) [1] NA 2 NA NA 1 2NA与NULL值 NA表示存在但未知的数NULL代表不存在的数 当数据中存在NA值是要么删掉但可能会让结果有偏差尤其是在做科研时处理较大的数据时慎重考虑要么给它一个这组数据的平均数或者是其他看你处理什么数据与看你的需求。 NULL还有其他用法比如在循环中创建一个向量便于存数据。 举例如下 mean(c(3,5,7,9,NA)) #存在NA值无法确定NA值的大小返回结果也未知 [1] NAmean(c(3,5,7,9,NA),na.rmT) #把NA值删掉 [1] 6mean(c(3,5,7,9,NULL)) #NULL值根本不存在不影响结果 [1] 6向量元素的筛选 以下举例几个常用函数 1.which()函数 which() 返回满足条件元素的位置注意是返回位置如 a-c(1,5,7,4,9)which(a4) #返回a等于4的元素的位置位置为4 [1] 4which(a5) #返回a大于5的元素的位置第3与第5是大于5的 [1] 3 52.subset()函数 subset() 函数是返回符合条件的元素但会忽略NA值。注意条件应为逻辑值否则会报错详情看如下代码 x-c(1,3,7,NA,10) #一个含有NA值的向量x[x6] #用向量的索引查看一下x6的元素 [1] 7 NA 10subset(x,x6) #筛选x6的元素可以注意到它忽略了NA值x6可以理解为一个逻辑向量 [1] 7 103.ifelse()函数 ifelse(x,a,b) 函数判断元素x是否符合条件如符合返回a若不符合返回b。其中x为逻辑值 如 X-1:10 Y-ifelse(X%%20,1,0) #如果为偶数返回1奇数返回0Y[1] 0 1 0 1 0 1 0 1 0 1进阶 temp0-sample(c(5,6),50,replaceT) #我用sample函数随机生成一个长度为50元素只有5与6随机生成temp0 #看一下temp0[1] 6 5 6 5 6 5 5 6 6 6 5 6 5 5 5 6 5 6 6 6 5 6 5 6 5 [26] 6 6 6 6 5 5 5 6 5 6 5 6 5 5 6 5 5 6 6 6 6 5 6 5 5#我想计算一下temp0中数字5出现的次数有多种方法#方法一temp1-ifelse(temp05,1,0) #我让为5的等于1不为5的等于0sum(temp1) #求和一下结果就为temp0中5的个数 [1] 24#方法二temp2-temp0 #temp2等于temp0防止temp0数据被更改temp2[temp25]-1 #让元素为5的等于1temp2[temp26]-0 #让元素为6的等于0sum(temp2) #求和就是5的个数 [1] 24#方法三temp3-which(temp05) #找向量temp0中为5的位置并用一个向量接受它length(temp3) #在算temp3的长度 [1] 24length(which(temp05)) #还能简化一下上两行的代码直接出向量temp0中为5的元素个数 [1] 24#方法多种多样只要能出正确结果的方法都能只是代码复杂度的问题我不再一一列举各位有兴趣可以自行探索 向量相等 有多种方法可以判断两向量是否相等 1.all()函数 返回逻辑值 2.identical函数判断两向量是否相等返回逻辑值 3.自定义函数(自己写一个函数判断) all()函数与identical()使用及两者区别直接请看如下代码 d1-c(1,5,7,9)d2-c(1,5,7,9)d3-c(2,4,7,9)d4-1:5d5-c(1,2,3,4,5)all(d1,d2) #判断d1与d2是否相等返回了TRUE但是出现了警告 [1] TRUE Warning messages: 1: In all(d1, d2) : coercing argument of type double to logical 2: In all(d1, d2) : coercing argument of type double to logicalall(d1,d3) #判断d1与d3是否相等返回了TRUE但是出现了警告 [1] TRUE Warning messages: 1: In all(d1, d3) : coercing argument of type double to logical 2: In all(d1, d3) : coercing argument of type double to logicalidentical(d1,d2) #判断d1与d2是否相等返回了TRUE [1] TRUEidentical(d1,d3) #判断d1与d3是否相等返回了FALSE [1] FALSEall(d4,d5) #判断d4与d5是否相等返回了TRUE但是出现了警告 [1] TRUE Warning message: In all(d4, d5) : coercing argument of type double to logicalidentical(d4,d5) #判断d4与d5是否相等返回了FALSE [1] FALSE#在对比d4与d5时all与identical出现了不同的结果虽然内容相同但是定义向量的方式不同有区别#这是all与identcal的主要区别。数据结构的查看 上面一部分,我们了解了R含有向量的数据结构当然还有其他数据结构比如矩阵、数据框、列表等我们可以使用class(), 控制语句 ifelse()函数iflese(x,a,b)如果x为TRUE则执行a,否者执行b for循环 for(i in x){·········}i在循环会取遍x中的值例如 for(i in c(1,5,7)) # i 在157中从左到右依次取{print(i^2)} [1] 1 [1] 25 [1] 49next与break next在for中表示继续循环break表示跳出循环例如: for(i in c(1,5,7)){ifelse(i5,print(i^2),next)} [1] 1 [1] 25for(i in c(1,5,7,8)){ifelse(i7,print(i^2),break)} [1] 1 [1] 25 [1] 49while()函数 和C语言用法一样当括号里条件为TRUE时执行语句 a-3while(a3){print(a1)a-FALSE} [1] 4repeat()函数 意为重复搭配if、break使用不用break跳出程序将陷入死循环 repeat {a-a1if(a7){break} } if(···){···}else{···}语句 特别注意else必须跟在第一个大括号后面否则报错举例如下 for(i in c(1,2,3,4,5)){if(i3){print(i^2)}else #else必须跟在第一个大括号后面{print(i^3)}} [1] 1 [1] 4 [1] 9 [1] 64 [1] 125逻辑运算符 和C语言差不多表示与||表示或表示非 函数返回值 1.利用return返回结果 2.如果没有return则返回语句最后一行执行的结果举例如下 F-function(a){k-areturn(k)}F(3) #利用return返回结果 [1] 3F1-function(a,b){d-a-bc-abc}F1(5,2) #返回最后执行的语句值 [1] 7全局变量与局部变量 如果学过C语言好理解如果没学过可以把全局变量理解为在函数内部无法改变的变量局部变量就是在函数内部的变量具有临时性。如 b-5 #全局变量f3-function(x){b-7 #这个并没有改变外面那个bb1-x #局部变量在函数外访问不到函数返回结果后被删除b2-bb1return(b2)}f3(9) [1] 16b #b没有发生变化 [1] 5b1 #在函数中是局部变量函数返回结果后被删除所以无法找到 Error: object b1 not found矩阵 矩阵matrix) 是一种特殊的向量包含两个附加的属性行数和列数R生存矩阵时按列存储。 注意向量不能看成只有1列或1行的矩阵 矩阵的创建 1.利用函数matrix()函数 matrix(data NA, nrow 1, ncol 1, byrow FALSE,dimnames NULL)其中data表示要处理的数据向量)nrow表示行ncol表示列byrow表示是否按行排列默认是列排dimnames表示行与列的名字默认是没有要使用列表设置。如下代码 mydata-matrix(c(1,2,3,4,5,6),nrow2,ncol3) #两行三列默认按列排mydata[,1] [,2] [,3] [1,] 1 3 5 [2,] 2 4 6mydata1-matrix(c(1,2,3,4,5,6),nrow2,ncol3,byrowT) #两行三列按行排mydata1[,1] [,2] [,3] [1,] 1 2 3 [2,] 4 5 6mydata3—matrix(c(1,2,3,4,5,6),nrow2,ncol3,dimnameslist(c(r1,r2),c(c1,c2,c3)))mydata3 #设置了名字名字要用列表list形式如上一行代码c1 c2 c3 r1 1 3 5 r2 2 4 62.利用函数将向量接起来函数有rbind()按行接起来、cbind()按列接起来例子代码如下 mydata5-rbind(c(1,2,3),c(4,5,6)) #按行将两个向量接起来形成矩阵mydata5[,1] [,2] [,3] [1,] 1 2 3 [2,] 4 5 6mydata6-cbind(c(1,2,3),c(4,5,6)) #按列将两个向量接起来形成矩阵mydata6[,1] [,2] [1,] 1 4 [2,] 2 5 [3,] 3 63.强制转换为矩阵 利用as.matrix()函数强制转换为矩阵如 a-c(1,2,3,4,5,6,7,8)a1-as.matrix(a) #强制转换为矩阵但是只有一列a1[,1] [1,] 1 [2,] 2 [3,] 3 [4,] 4 [5,] 5 [6,] 6 [7,] 7 [8,] 84.建立一个空矩阵 直接写行列大小如下 d-matrix(nrow3,ncol2) #建立一个3行2列的空矩阵内容为NA存在但未知d[,1] [,2] [1,] NA NA [2,] NA NA [3,] NA NA注意事项 当两个向量长度不相等时会出现警告长度不等的那个向量会用循环补齐的形式填补如下 mydata7-cbind(c(1,2,3,4,5),c(4,5)) #后一个向量短出现警告后面循环补上 Warning message: In cbind(c(1, 2, 3, 4, 5), c(4, 5)) :number of rows of result is not a multiple of vector length (arg 2)mydata7[,1] [,2] [1,] 1 4 [2,] 2 5 [3,] 3 4 [4,] 4 5 [5,] 5 4mydata8-cbind(c(1,2),c(4,5,6,7,8)) #前面一个短出现警告前一个循环补齐 Warning message: In cbind(c(1, 2), c(4, 5, 6, 7, 8)) :number of rows of result is not a multiple of vector length (arg 1)mydata8[,1] [,2] [1,] 1 4 [2,] 2 5 [3,] 1 6 [4,] 2 7 [5,] 1 8当向量中含有不同类型的数据时会改变元素类型后转变为矩阵如下: mydata10-matrix(c(2,5,FALSE,TRUE),2,2) #向量含有逻辑与数值型逻辑转为数值2行2列按列排mydata10[,1] [,2] [1,] 2 0 [2,] 5 1#向量含有逻辑,字符与数值型全部转为字符2行3列按列排mydata9-matrix(c(1,3,FALSE,TRUE,ABC,babiQ),2,3) mydata9[,1] [,2] [,3] [1,] 1 FALSE ABC [2,] 3 TRUE babiQ矩阵的索引 使用下标和中括号来选择矩阵中的行或列或元素矩阵名中括号中括号里面写需要的行与列 我有一个矩阵名字为mymatrix5行5列如下 mymatrix-matrix(c(1:25),5,5)mymatrix[,1] [,2] [,3] [,4] [,5] [1,] 1 6 11 16 21 [2,] 2 7 12 17 22 [3,] 3 8 13 18 23 [4,] 4 9 14 19 24 [5,] 5 10 15 20 25矩阵每一行前或列首都有一个中括号括起来的可以理解为这一行或列 1.mymartix[i,]返回矩阵mymatrix中第i行元素如 mymatrix[3,] #返回第三行元素 [1] 3 8 13 18 232.mymartix[,j]返回矩阵mymatrix中第j列元素如 mymatrix[,5] #返回第5列元素 [1] 21 22 23 24 253.mymartix[i,j]返回矩阵mymatrix中第i行第j列元素如 mymatrix[2,2] #返回第2行第2列元素 [1] 74.mymatrix[i,-j]返回第i行,但排除第j列元素如 mymatrix[2,-3] #返回第2行,但排除第3列元素 [1] 2 7 17 225.mymatrix[-i,j]返回第j列但排除第i行元素如 mymatrix[-3,2] #返回第2列但排除第3行元素 [1] 6 7 9 106.mymatrix[c(m,n),c(p,k)]返回第m和n行第p和k列元素如 mymatrix[c(1,3),c(3,5)] #返回第1和3行第3和5列元素[,1] [,2] [1,] 11 21 [2,] 13 237.mymatrix[-c(m,n),c(p,k)]返回第p和k列但排除第m和n行元素如 mymatrix[-c(1,3),c(3,5)] #返回第3和5列但排除第1和3行元素[,1] [,2] [1,] 12 22 [2,] 14 24 [3,] 15 258.当矩阵有行列名时可以通过行与列名进行提取元素如: mymatrix3 #这里有一个矩阵c1 c2 c3 c4 c5 行均值 r1 1 6 11 16 21 11 r2 2 7 12 17 22 12 r3 3 8 13 18 23 13 r4 4 9 14 19 24 14 r5 5 10 15 20 25 15 列均值 3 8 13 18 23 NAmymatrix3[r1,c2] #返回列名c2行名为r1的元素 [1] 6mymatrix3[c(r2,r4),c(c3,c5)] #返回行名为r2与r4,列名为c3与c5的元素c3 c5 r2 12 22 r4 14 24drop处理意外降维 上面矩阵的引用1~5条从一个矩阵中提取的结果都为向量如果说我取一行或一列后返回结果要求是矩阵虽然说可以先取后转变为矩阵但相对还是麻烦了我们可以加入drop防止降维如 mymatrix-matrix(c(1:25),5,5)mymatrix[2,] #直接取就会降维为向量 [1] 2 7 12 17 22mymatrix[2,,dropF] #如果要求取出是矩阵则加入dropF[,1] [,2] [,3] [,4] [,5] [1,] 2 7 12 17 22矩阵相关操作及相关函数部分 1.转置函数t(),如 mymatrix-matrix(c(1:25),5,5) #我这里有一个矩阵mymatrix[,1] [,2] [,3] [,4] [,5] [1,] 1 6 11 16 21 [2,] 2 7 12 17 22 [3,] 3 8 13 18 23 [4,] 4 9 14 19 24 [5,] 5 10 15 20 25mymatrix1-t(mymatrix) #对函数进行转置返回结果如下mymatrix1[,1] [,2] [,3] [,4] [,5] [1,] 1 2 3 4 5 [2,] 6 7 8 9 10 [3,] 11 12 13 14 15 [4,] 16 17 18 19 20 [5,] 21 22 23 24 252.横向或纵向合并矩阵 cbind()函数横向合并矩阵 rbind()函数纵向合并矩阵举例如下 M-matrix(c(1,2,3,4),2,2) N-matrix(c(5,6,7,8),2,2) #建立了两个矩阵M,N如下M[,1] [,2] [1,] 1 3 [2,] 2 4N[,1] [,2] [1,] 5 7 [2,] 6 8cbind(M,N) #横向合并矩阵M,N[,1] [,2] [,3] [,4] [1,] 1 3 5 7 [2,] 2 4 6 8rbind(M,N) #纵向合并矩阵M,N[,1] [,2] [1,] 1 3 [2,] 2 4 [3,] 5 7 [4,] 6 83.对各列或行求和或求均值 colSums()对各列求和rowSums()对各行求和 colMeans()对各列求均值rowMeans()对各行求均值举例如下 mymatrix #以这个矩阵举例[,1] [,2] [,3] [,4] [,5] [1,] 1 6 11 16 21 [2,] 2 7 12 17 22 [3,] 3 8 13 18 23 [4,] 4 9 14 19 24 [5,] 5 10 15 20 25colSums(mymatrix) #对各列求和 [1] 15 40 65 90 115rowSums(mymatrix) #对各行求和 [1] 55 60 65 70 75colMeans(mymatrix) #对各列求均值 [1] 3 8 13 18 23rowMeans(mymatrix) #对各行求均值 [1] 11 12 13 14 154.计算行列式 det()函数计算行列式举例如下 M[,1] [,2] [1,] 1 3 [2,] 2 4det(M) [1] -25.矩阵相乘 使用%*%进行矩阵相乘举例如下 M[,1] [,2] [1,] 1 3 [2,] 2 4N[,1] [,2] [1,] 5 7 [2,] 6 8K-M%*%N #两矩阵相乘K[,1] [,2] [1,] 23 31 [2,] 34 466.设置行列名 设置行列名有三种以上方式这里介绍三种常用的 在创建矩阵时设置行列名如 #使用dimnames以列表的形式设置行列名 fa-matrix(c(2,3,4,5),2,2,dimnames list(c(第一行,第二行),c(第一列,第二列))) fa第一列 第二列第一行 2 4第二行 3 5在外部使用dimnames()函数设置行列名 fa1-matrix(c(6,7,8,9),2,2) #矩阵原先未设置行列名 a-c(第一行,第二行) b-c(第一列,第二列) dimnames(fa1)-list(a,b) #使用dimnames函数设置行列名 fa1第一列 第二列第一行 6 8第二行 7 9使用函数rownames()设置行名使用colnames()设置列名 fa2-matrix(c(1,3,5,7),2,2) #行列未命名的矩阵rownames(fa2)-c(A1,A2) #对行命名colnames(fa2)-c(B1,B2) #对列命名fa2B1 B2 A1 1 5 A2 3 7apply()函数 apply(m,dimcode,f,fargs) 允许用户在各行各列调用函数 m 矩阵dimcode 1代表行 2代表列f函数frags可选参数函数大于一个参考时使用用“”隔开。 mymatrix-matrix(c(1:25),5,5) #建立了一个矩阵mymatrix[,1] [,2] [,3] [,4] [,5] [1,] 1 6 11 16 21 [2,] 2 7 12 17 22 [3,] 3 8 13 18 23 [4,] 4 9 14 19 24 [5,] 5 10 15 20 25mymatrix_rowmean-apply(mymatrix,1,mean) #对行求均值mymatrix_colmean-apply(mymatrix,2,mean) #队列求均值mymatrix_rowmean1-matrix(mymatrix_rowmean,length(mymatrix_rowmean),1) #转换为一列的矩阵mymatrix_colmean1-matrix(mymatrix_colmean,1,length(mymatrix_colmean)) #转换为一行的矩阵mymatrix_colmean1[6]-NA #矩阵右下角有个空用NA值填一下方便连接mymatrix2-cbind(mymatrix,mymatrix_rowmean1) #按列把两个矩阵接起来mymatrix3-rbind(mymatrix2,mymatrix_colmean1) #按列把两个矩阵接起来a-c(r1,r2,r3,r4,r5,列均值)b-c(c1,c2,c3,c4,c5,行均值)dimnames(mymatrix3)-list(a,b) #设置行列名mymatrix3 #展示结果c1 c2 c3 c4 c5 行均值 r1 1 6 11 16 21 11 r2 2 7 12 17 22 12 r3 3 8 13 18 23 13 r4 4 9 14 19 24 14 r5 5 10 15 20 25 15 列均值 3 8 13 18 23 NA数据结构的查看 上面一部分,我们了解了R含有向量矩阵数据结构当然还有其他数据结构比如数据框、列表等我们可以使用class(),如 mymatrix-matrix(c(1:25),5,5) class(mymatrix) [1] matrix array a-c(1,2)class(a) [1] numeric判断对象是否是矩阵 1.使用attributes()函数若是矩阵返回一个维度若不是返回NULL值如下 mymatrix-matrix(c(1:25),5,5)attributes(mymatrix) #返回维度5行5列 $dim [1] 5 5attributes(mymatrix[2,]) #向量无维度返回NULL值 NULL 2.使用is.matrix()函数如 mymatrix-matrix(c(1:25),5,5)is.matrix(mymatrix) #判断mymatrix是不是一个矩阵若是返回TRUE,不是返回FALSE [1] TRUEis.vector(mymatrix[2,]) #判断mymatrix[2,]是不是向量是返回TRUE不是返回FALSE [1] TRUE列表 列表list 是R的数据类型中最为复杂的一种。一般来说列表就是一些对象或成分component的有序集合。列表允许整合若干可能无关的对象到单个对象名下。 列表允许以一种简单的方式组织和重新调用不相干的信息。 许多R函数的运行结果都是以列表的形式返回的。函数需要返回两个以上变量时需采用list形式返回。 列表的创建 使用list(·····)创建列表list(object1,object2······)其中的object可以是到目前为止提到的任何数据类型比如向量矩阵列表等。下面举个例子如 d-our one list #单个字符d1-c(1,2,4,7,9) #向量d2-matrix(c(2,4,6,8),2,2,byrowT) #矩阵ourlist-list(d,d1,d2) #建立列表ourlist #查看列表 [[1]] [1] our one list [[2]] [1] 1 2 4 7 9[[3]][,1] [,2] [1,] 2 4 [2,] 6 8 声明列表 之前提过如何建立一个空向量现在建立声明一个空列表也差不多如下 ourlist2-list() #建立或声明一个空向量mode(ourlist2) #查看一下类型返回结果是列表 [1] list标签或者对象名的命名 每一个列表组件都可设置标签就像向量的变量名或矩阵的行列名一样标签会显示在$的后面。命名的方式很简单直接在建立列表时直接命名如 d-our one list d1-c(1,2,4,7,9)d2-matrix(c(2,4,6,8),2,2,byrowT)d3-list(c(1,2),c(3,4)) #列表ourlist3-list(字符d,d1d1,juzhend2,d3) #注意我这里列表里嵌套了一个列表#第一个组件名字是“字符”第二个是d1第三个是juzhenourlist3 #$符号的后面是标签组件名如果没有标签的那个$号会变成[[数字]]如第4个 $字符 [1] our one list $d1 [1] 1 2 4 7 9$juzhen[,1] [,2] [1,] 2 4 [2,] 6 8[[4]] [[4]][[1]] [1] 1 2[[4]][[2]] [1] 3 4删除标签 这里讲的删除标签是删除列表中的所有标签有两个函数可以使用 使用unname()函数去掉标签如 listxx-list(d3c(2,4,6,8),d4c(1,3,5,7))listxx $d3 [1] 2 4 6 8$d4 [1] 1 3 5 7 unname(listxx) #去掉标签 [[1]] [1] 2 4 6 8[[2]] [1] 1 3 5 7使用NULL listxx1-list(d5c(2,4,6,8),d6c(1,3,5,7))listxx1 #这个列表是有标签的 $d5 [1] 2 4 6 8$d6 [1] 1 3 5 7 names(listxx1)-NULL #给标签一个NULL值listxx1 #列表标签被删除 [[1]] [1] 2 4 6 8[[2]] [1] 1 3 5 7鬼点子 既然我们上面看到了使用names()-NULL,可以删掉标签那么如果把NULL值换成向量是不是可以更换列表标签呢这是我写这篇文章的时候突发奇想的之前并不知道我直接试了一下如下 listxx2-list(D1c(2,4,6,8),D2c(1,3,5,7))listxx2 #兄弟们这是可以的 $D1 ##### ##### [1] 2 4 6 8 ### ### ### ###$D2 [1] 1 3 5 7 ## #### ##names(listxx2)-c(f1,f2) ## ##listxx2 ########## $f1 [1] 2 4 6 8$f2 [1] 1 3 5 7列表元素的索引 列表元素的索引有多种一是索引列表某组件二是索引列表中某组件里的内容 一、索引列表某组件 1.如果有标签可以通过标签索引一个组件整体方法与向量矩阵的访问差不多如我们用上面例子ourlist3举例 ourlist3[字符] #中括号里写标签注意要用双引号 $字符 [1] our one list ourlist3[1] #直接中括号里一个数字这个数字代表的是列表里第几个组件 $字符 [1] our one list 2.无论有无标签都可以直接用组件序号索引如 ourlist4-list(c(1,2),c(3,5)) #有一个列表没有给组件设置标签ourlist4[2] #直接可以中括号里写组件序号索引一整个组件 [[1]] [1] 3 5class(ourlist4[2]) #class一下ourlist4[2]是一个列表 [1] list二、索引列表某组件中的内容 1.如果有标签有两种方式索引组件内容 使用$符号索引组件内容变量名$标签 如 ourlist5-list(ac(1,2),bc(3,5),c(5,6)) #这里有一个列表两个有标签 ourlist5 #查看一下是我预期结果$a[1] 1 2$b[1] 3 5[[3]][1] 5 6 ourlist5$a #使用$符号加标签索引[1] 1 2 ourlist5$b[1] 3 5 class(ourlist5$a) #class一下ourlist5$4,它是数值型内容[1] numeric使用两个中括号中括号里写标签标签要用双引号如 ourlist5-list(ac(1,2),bc(3,5),c(5,6)) ourlist5[[a]] #两个中括号中括号里写标签标签要用双引号[1] 1 2 ourlist5[[b]][1] 3 52.无论有无标签都可用两个中括号中括号里写组件序号索引组件内容 如 ourlist5-list(ac(1,2),bc(3,5),c(5,6))ourlist5[[1]] #两个中括号中括号里写组件序号访问 [1] 1 2ourlist5[[3]] [1] 5 6列表元素的增减 1.增加元素 当我有一个列表已经创建完毕但还需加入元素时可以直接通过索引的方式赋值如 方法一通过两个中括号的方式本来没有第三个的直接加一个进去R灰常银杏话nice ourlist6-list(ac(1,2),bc(3,5))ourlist6[[3]]-TRUE #第三个给它一个TRUEourlist6 $a [1] 1 2$b [1] 3 5[[3]] [1] TRUE 方法二通过$符号直接标签与内容一次性直接加进去。 ourlist7-list(ac(很好,非常好),bc(good,nice))ourlist7$c-好极了 #ourlist7 $a [1] 很好 非常好$b [1] good nice$c [1] 好极了2.减元素 把你不需要的直接赋值为NULL之前提过NULL表示啥也没有请直接看代码如; ourlist7 #我这里有一个列表他有三个元素 $a [1] 很好 非常好$b [1] good nice$c [1] 好极了ourlist7$bNULL #现在把第二个删掉赋给它一个NULL值看如下结果ourlist7 $a [1] 很好 非常好$c [1] 好极了 当然仿照向量使用负索引也是可以的如 ourlist8-list(ac(很好,非常好),bc(good,nice))#这里使用另一个变量ourlist9来接受它因为和向量一样负索引不会对原来的有影响ourlist9-ourlist8[-2] ourlist9 $a [1] 很好 非常好ourlist8 #ourlist8是没有改变的ourlist9是ourlist8删了第二项后的 $a [1] 很好 非常好$b [1] good nice 获取标签 直接使用names()函数获取列表所有标签如 ourlist8-list(ac(很好,非常好),bc(good,nice))names(ourlist8) #返回结果是列表所有标签如果列表好多标签可以选择你需要的标签索引元素 [1] a b解除列表 直接使用unlist()函数解除列表可以理解为一个列表让它散架 ourlist8-list(ac(很好,非常好),bc(good,nice))unlist(ourlist8) #返回结果是字符型向量标签会各自显示在上方a1 a2 b1 b2 很好 非常好 good nice class(unlist(ourlist8)) [1] character列表相关函数部分 1.lapply()函数 lapply()-list apply 给每个组件执行给定函数返回列表和矩阵apply()类似同属于apply家族 使用方法lapply(目标列表函数)举例如下 listaa1-list(a1c(1,3,5,7,9),a2c(2,4,6,8,10))lapply(listaa1,mean) #对每一个组件执行求均值 $a1 [1] 5$a2 [1] 6lapply(listaa1,max) #返回组件内容中的最大值 $a1 [1] 9$a2 [1] 102.sapply()函数 与lapply()一样只是返回的结果类型是向量举例如下 listaa1-list(a1c(1,3,5,7,9),a2c(2,4,6,8,10))sapply(listaa1,mean) #返回结果是向量标签与返回值竖一一对应 a1 a2 5 6 class(sapply(listaa1,mean)) [1] numeric数据框 数据框的创建 数据框类似矩阵有行列两个维度。数据框允许不同的列可以包含不同类型的数据。注意数据框可以看成每个组件长度相同的列表。。个人见解数据框就像excel表格一样比矩阵高级一点。很多东西都可以参考矩阵。 x-data.frame(col1, col2, col3……) 其中的列向量col1, col2, col3,… 可为任何类型如字符型、数值型或逻辑型。数据框可以看成每个组件长度相同的列表数据框类似矩阵有行列两个维度。建议数据框在Rstudio的左上角框里查看。数据框的创建举例如下 mydata1-data.frame(namec(李华,张三,李怡),性别c(男,女,女),agec(18,19,20))#name,性别,age 是列名mydata1name 性别 age 1 李华 男 18 2 张三 女 19 3 李怡 女 20 数据框的索引 数据框的索引与矩阵的索引差不多 1.索引一整各组件 使用一个中括号索引中括号里写第几列序号如 mydata1-data.frame(namec(李华,张三,李怡),性别c(男,女,女),agec(18,19,20))mydata1[3] #索引第三列的age元素age 1 18 2 19 3 20class(mydata1[3]) #索引的结果是一个数据框 [1] data.frame使用列名索引与列表矩阵相同如 mydata1-data.frame(namec(李华,张三,李怡),性别c(男,女,女),agec(18,19,20))mydata1[name] #列名索引name 1 李华 2 张三 3 李怡mydata1[c(age,name)] #这里使用了向量索引了两列age name 1 18 李华 2 19 张三 3 20 李怡class(mydata1[name]) #索引的结果是一个数据框 [1] data.frame#当然还可以像矩阵一样索引多列多行如mydata1[,c(1,3)] #索引13列name age 1 李华 18 2 张三 19 3 李怡 20mydata1[,c(name,age)] #使用列名索引13列name age 1 李华 18 2 张三 19 3 李怡 20mydata1[c(1,2),c(name,age)] #索引特定的行列name age 1 李华 18 2 张三 192.索引组件里的元素和列表相同如 使用两个中括号中括号里写列的序号或者是列名列名要引号如 mydata1-data.frame(namec(李华,张三,李怡),性别c(男,女,女),agec(18,19,20))mydata1[[2]] #中括号里写所需的列序号 [1] 男 女 女mydata1[[性别]] #中括号写列名列名要加引号因为它是字符型 [1] 男 女 女class(mydata1[[性别]]) #索引后返回结果是字符型向量 [1] character使用$符号索引与列表相同 mydata1-data.frame(namec(李华,张三,李怡),性别c(男,女,女),agec(18,19,20))mydata1$性别 [1] 男 女 女class(mydata1$性别) #索引后返回结果是字符型向量 [1] character数据框有两个维度可以返回多行多列的结果具体操作方式与矩阵 相同这里不过多阐述怕读者读了睡觉 数据框行列名的获取与更改 数据框行列名的读取与编辑有多种方式这里介绍两种常用的 数据框列名的读取与更改 1.可以通过colnames(数据框)来读取并编辑列名称。 这种方式很银杏话dog,既可以单个读取或更改也可以大量读取或更改请看如下代码 列名读取colnames(数据框)[···]或者colnames(数据框) mydata1-data.frame(namec(李华,张三,李怡),性别c(男,女,女),agec(18,19,20))colnames(mydata1)[1] #读取第一列列名读取哪个中括号里就写几 [1] namecolnames(mydata1)[c(1,2)] #我使用向量读取了两个 [1] name 性别colnames(mydata1) #读取数据框所有列名 [1] name 性别 age 列名更改colnames(数据框)[···]或者colnames(数据框)-c(···) mydata1-data.frame(namec(李华,张三,李怡),性别c(男,女,女),agec(18,19,20))colnames(mydata1)[1]-a #更改第一列列名要改第几个中括号里就写几mydata1 a 性别 age 1 李华 男 18 2 张三 女 19 3 李怡 女 20colnames(mydata1)[3]-c #更改第三列列名mydata1a 性别 c 1 李华 男 18 2 张三 女 19 3 李怡 女 20colnames(mydata1)-c(a1,b,c1) #注意没有中括号了我使用一个向量全部改了mydata1a1 b c1 1 李华 男 18 2 张三 女 19 3 李怡 女 20数据框行名的读取与更改 可以通过row.names(数据框)来读取并更改行名称 行名读取row.names(数据框)[···]或row.names(数据框)举例如下 mydata1-data.frame(namec(李华,张三,李怡),性别c(男,女,女),agec(18,19,20))#读取所有行名因为我没有设置行名所以系统帮你默认了数字可以在Rstudio左上角框里看到row.names(mydata1) [1] 1 2 3row.names(mydata1)[2] #还可以查看第几个第几个你想看的行名 [1] 2row.names(mydata1)[c(2,3)] #多行中括号里就用向量 [1] 2 3行名更改,row.names(mydata1)-c(···)举例如下 mydata1-data.frame(namec(李华,张三,李怡),性别c(男,女,女),agec(18,19,20))mydata1name 性别 age 1 李华 男 18 2 张三 女 19 3 李怡 女 20#从上面的结果看到我没有设置行名系统默认了一个往往按大部分需求是要改的row.names(mydata1)-c(r1,r2,r3) #更改行名结果如下mydata1name 性别 age r1 李华 男 18 r2 张三 女 19 r3 李怡 女 20数据框元素的增减 1.数据框元素的增加 和矩阵一样也可以使用rbind()与cbind()函数添加行列但需注意数据框使用rbind()时添加的行是数据框或列表。 添加列举例如下 mydata2-data.frame(namec(李小华,张大三,李佳怡),性别c(男,男,女),agec(18,19,20)) #这里有一个数据框mydata2name 性别 age 1 李小华 男 18 2 张大三 男 19 3 李佳怡 女 20higth-c(175,173,167) #这里创建了一个身高的向量mydata3-cbind(mydata2,higth) #按列合并返回结果如下mydata3name 性别 age higth 1 李小华 男 18 175 2 张大三 男 19 173 3 李佳怡 女 20 167添加行注意数据框使用rbind时添加的行是数据框或列表。举例如下 #这里直接沿用上面的例子mydata3name 性别 age higth 1 李小华 男 18 175 2 张大三 男 19 173 3 李佳怡 女 20 167a-data.frame(name陈永鸿,性别男,age21,higth177) #要加入的新数据框a #看一下是不是我需要的name 性别 age higth 1 陈永鸿 男 21 177rbind(mydata3,a) #按行合并数据框name 性别 age higth 1 李小华 男 18 175 2 张大三 男 19 173 3 李佳怡 女 20 167 4 陈永鸿 男 21 1772.数据框元素的删除 数据框元素的删除有多种方式但方法与矩阵的差不多 直接看代码如下 使用负索引 mydata2-data.frame(namec(李小华,张大三,李佳怡),性别c(男,男,女),agec(18,19,20))mydata2name 性别 age 1 李小华 男 18 2 张大三 男 19 3 李佳怡 女 20#负索引的形式但也要覆盖或这建立新数据框储存mydata4-mydata2[-2,] #删掉第二行mydata4name 性别 age 1 李小华 男 18 3 李佳怡 女 20mydata5-mydata2[-3,-3] #删除第三行第三列mydata5name 性别 1 李小华 男 2 张大三 男赋予NULL值 mydata2name 性别 age 1 李小华 男 18 2 张大三 男 19 3 李佳怡 女 20mydata6-mydata2#好像不可以使用NULL值取删除行如果有同志会操作的可以在评论区留言mydata6[2,]-NULL Error in x[[jj]][iseq] - vjj : replacement has length zeromydata6[,2]-NULL #给第二列一个NULL值mydata6 #查看mydata6,与删除前对比就是删除了第三列name age 1 李小华 18 2 张大三 19 3 李佳怡 20mydata7-mydata2mydata7[,age]-NULL #使用列名也是可以的(呕心沥血)mydata7name 性别 1 李小华 男 2 张大三 男 3 李佳怡 女数据框相关函数 基本以矩阵一致好多函数都可以用这里我举例apply 与lapply()如 apply() mydata9-data.frame(c1c(1,2,3),c2c(6,7,8),c3c(11,12,13),c4c(4,5,6))mydata9c1 c2 c3 c4 1 1 6 11 4 2 2 7 12 5 3 3 8 13 6r_mean-apply(mydata9,1,mean) #对行求均值da-cbind(mydata9,r_mean) #按列合并dac1 c2 c3 c4 r_mean 1 1 6 11 4 5.5 2 2 7 12 5 6.5 3 3 8 13 6 7.5r-apply(da,2,mean) #求列均值mydata10-rbind(da,r) #合并行mydata10[4,5]-NA #不需要右下角的那个值mydata10c1 c2 c3 c4 r_mean 1 1 6 11 4 5.5 2 2 7 12 5 6.5 3 3 8 13 6 7.5 4 2 7 12 5 NArownames(mydata10)-c(r1,r2,r3,c_mean) #改一下行名mydata10c1 c2 c3 c4 r_mean r1 1 6 11 4 5.5 r2 2 7 12 5 6.5 r3 3 8 13 6 7.5 c_mean 2 7 12 5 NAlapply(),注意此函数操作对象是列表即在数据框中默认对列操作 mydata9c1 c2 c3 c4 1 1 6 11 4 2 2 7 12 5 3 3 8 13 6mydata11-lapply(mydata9,sum) #lappya()函数mydata11 #对列操作 $c1 [1] 6$c2 [1] 21$c3 [1] 36$c4 [1] 15有时候数据框会转换成矩阵操作此时可以使用as.matrix()函数操作这里不进行举例太简单了 因子和表 因子factor 是R语言中许多强大运算的基础因子的设计思想来着统计学中的名义变量(分类变量),因子可以简单的看做一个附加了更多信息的向量。使用方法factor(x character(), levels, labels levels, exclude NA, ordered is.ordered(x), nmax NA) 因子的创建 不像向量、矩阵与数据框比较直观很好理解因子不太好使用语言描述但是代码很直观能很直观的返回对象有多少水平。直接看例子吧 myvector-c(T,F,T,T,F,T) #这里有一个向量myfactor-factor(myvector) #这是因子的用法myfactor #查看一下 [1] T F T T F T Levels: F T#注意返回值第二行有一个水平指的是myvector只有F与T只有这两个水平。#第一行可以理解为myvector转换为因子后的结果。因子的索引 因子的索引与向量的操作差不多但是返回的是原因子水平不过多介绍简单举例如下 myvector-c(T,F,T,T,F,T)myfactor [1] T F T T F T Levels: F Tmyfactor[c(1,2)] #取12个水平不变 [1] T F Levels: F Tmyfactor[c(3,4)] #取34个返回两个T,水平注意是原因子的水平 [1] T T Levels: F T因子的修改 与向量也差不多最简单的方法是赋值如 myvector-c(T,F,T,T,F,T)myfactor-factor(myvector)myfactor[3]-F #把第三个改为Fmyfactor [1] T F F T F T Levels: F T当然还有其他操作差不多都可以参照向量特别说明因子不是向量他们只是像因子的类型是因子型与向量不同 因子常用函数 1.tapply()函数 tapply(x,f,g): x向量f因子或因子列表g函数。tapply执行操作将x分组每组对应一个因子水平多因子情况下对应一组水平的组合然后向量应用于函数g,注意f中每个因子需要与x具有相同的长度返回值是向量或矩阵。x必须是向量 举例如下 data1 #这里有一个数据框name 性别 age higth 1 李小华 男 18 175 2 张大三 男 19 173 3 李佳怡 女 20 167 4 黎晓鸿 男 21 177class(data1) [1] data.frame#如下对性别进行分组后对身高进行求均值返回男的身高平均值女的身高平均值tapply(data1$higth,data1$性别,mean) 男 女 175 167 #如果想用分多组就用因子列表如 tapply(data1$higth,list(data1$性别,data1$name),mean)黎晓鸿 李佳怡 李小华 张大三 男 177 NA 175 173 女 NA 167 NA NA#如上结果开始有点有别扭那是因为你的数据量不够大#如果有几个人同时同名就可以算出这些人在分男女的情况下的身高均值我不在举例大伙可以去试试2.spilt()函数 和tapply(x,f,g)不同split(x,f)只分组,x可为数据框或向量返回值是列表。 举例如下 #沿用上面的数据框split(data1$name,data1$性别) #对name按照性别进行分组结果返回列表标签是分组水平 $男 [1] 李小华 张大三 黎晓鸿$女 [1] 李佳怡3.by()函数 by(x, f, function), x 向量或矩阵,注意by应用于对象f 是因子function 是函数。 举例如下 #继续沿用上面的数据框by(data1$higth,data1$性别,mean) data1$性别: 男 [1] 175 ----------------------------------------- data1$性别: 女 [1] 1674.aggregate()函数 aggregate(x,list,f),其中x为向量/数据框/矩阵第二个参数必须为一个列表f是函数。该函数可以按照要求把数据打组聚合然后对聚合以后的数据进行加和、求平均等各种操作。 举例如下 data1 #这里还是用了这个数据框name 性别 age higth 1 李小华 男 18 175 2 张大三 男 19 173 3 李佳怡 女 20 167 4 黎晓鸿 男 21 177aggregate(data1[,c(3,4)],list(data1$性别),mean) #按性别聚合后对age与higth进行求期望Group.1 age higth 1 男 19.33333 175 2 女 20.00000 167表 R中表指的是列联表至于什么意思我这里直接给你看代码表有多个函数我们举两个例子 1.table()函数 常用于统计向量频数举例如下 a-c(1,2,3,4,2,3,1,1,1,3,3,3,2,4)table(a) a 1 2 3 4 4 3 5 2 #解释1有4个2有3个3有5个4有2个注意表表可以如同矩阵一样访问 如 a-c(1,2,3,4,2,3,1,1,1,3,3,3,2,4)table(a)[3] #看第三个 3 5 list1-list(c(2,2,2,3,4,5,5),c(6,6,7,7,7,8,8))table(list1)list1.2 list1.1 6 7 82 2 1 03 0 1 04 0 1 05 0 0 2table(list1)[3,] 6 7 8 0 1 0 2.cut()函数 cut(x,b,labelsFALSE)是生成因子的一种常用方法常用于表操作。这个函数用法很复杂我这里举一个非常简单的如 a-cut(data1$higth,breaksc(-Inf,160,170,175,180,Inf),labelsc(不评价,还行,很好,喜欢,哇哇))a-cut(data1$higth,breaksc(-Inf,160,170,175,180,Inf),labelsc(不评价,身高还行,身高很好,喜欢这身高,哇哇))data1-cbind(data1,a)data1 #对身高的一个估测name 性别 age higth a 1 李小华 男 18 175 身高很好 2 张大三 男 19 173 身高很好 3 李佳怡 女 20 167 身高还行 4 黎晓鸿 男 21 177 喜欢这身高个人评价cut()这个函数用于基因表达的上调与下调好像很简便。我没有用过各位读者可以去试试评论区可以告诉我结果行不行 字符串 字符串比较简单基本上就一些函数如果学过C语言的应该就知道字符串是啥这里不在介绍。 字符串在文本挖掘中很重要使用正则表达式很方便。 字符串操作的常见函数 1.字符串长度 使用nchar()函数求字符串长度。举例如 a1-c(我是某某喜只因) #自己可以数一数什么也要算长度狗头nchar(a1) [1] 82.字符串合并 使用paste()合并字符串。paste(str1,str2,sep)举例如下 a2-我是坤a3-绰号只因a4-paste(a2,a3,sep-坤粉说-) #使用“-坤粉说-”进行连接a2与a3a4 [1] 我是坤-坤粉说-绰号只因3.字符串的分割 使用strsplit()函数分割字符串返回的是列表举例如下 a5-你~干~嘛~strsplit(a5,~) #分割a5分割位置是~ [[1]] [1] 你 干 嘛 4.读取字符串 使用substr()读取字符串substr(x, start, stop)举例如下 a6-读取字符串substr(a6,3,5) #读取3到5个字符 [1] 字符串substr(a6,5,5) #还能都一个“串”字哦晚上看到它的同志饿吗 [1] 串5.字符串的替换 使用chartr()函数替换元素chartr(old, new, x)把x里的old换成new的举例如下 a7-字符串的替换chartr(替换,更改,a7) [1] 字符串的更改注意替换时两个长度要相同不然出问题 6.多个组件合成一个字符串 使用sprintf()函数先给各位举个例子学过C语言的应该秒懂它是干啥的。 a9-666hh-sprintf(你真%d,a9) #对的a9里的数字替换了%dhh [1] 你真666具体举例如下 a10-哎呦a11-6h1-sprintf(你干嘛%s,%d,a10,a11) #%s是接受字符串型的数据h1 [1] 你干嘛哎呦,6正则表达式 正则表达式说它难吧感觉又不难它的内容很多建议有兴趣读者去搜索R正则表达式这里介绍几个常用的函数简单来说正则表达式就是找相同的作用范围非常广 1.grep() 函数 grep(pattern, x, ignore.case FALSE, perl FALSE, value FALSE,fixed FALSE, useBytes FALSE, invert FALSE)在向量x中搜索给定的子字符串pattern返回结果是匹配项的下标 x向量这里介绍简单的后面一串参数比较复杂。 grep(A,c(a,A,B,b)) #在向量中搜索A,返回在向量中的位置。 [1] 2当然还可以进行其他操作查找对应元素位置例如 a-c(en,english,glish) #这里有一个向量grep([an],a) #返回有an的元素的位置 [1] 1 2grep(l.s,a) #查找l与s中间有一个随便的元素返回23 [1] 2 3grep(e..l,a) #查找e至l中间有两个元素 [1] 2grep() 函数还有其他用法各位感兴趣可以自行百度 2.sub(old,new,x)函数 gsub()函数 sub(old,new,x)在x将old换成new,只对查找到的第一个内容进行替换。举例入下 a-c(a,c,d) sub(c,hh,a) #把c换成hh [1] a hh d gsub(old,new,x)在x将所有的old换成new对查找到的所有内容进行替换举例如下 a1-c(aac,hhc,sss,cdd)gsub(c,b,a1) #将所有的c换成b [1] aab hhb sss bdd3.regexpr(pattern,text)、gregexpr(pattern, text)函数 regexpr(pattern, text, ignore.case FALSE, perl FALSE,fixed FALSE, useBytes FALSE)返回一个与给出第一个匹配的起始位置的文本长度相同的整数向量如果没有则返回-1。举例如下 a2-c(asdasdv,wertsdasv,sdvasd)regexpr(sdas,a2) #返回结果第一个第二个元素有相同的返回2第二个第五个开始第三个无 [1] 2 5 -1 attr(,match.length) [1] 4 4 -1 attr(,index.type) [1] chars attr(,useBytes) [1] TRUEgregexpr(pattern, text, ignore.case FALSE, perl FALSE,fixed FALSE, useBytes FALSE)返回一个与文本长度相同的列表每个元素的格式与regexpr的返回值相同除了给出了每个不相交匹配的起始位置。举例如下 a2-c(asdasdv,wertsdasv,sdvasd)gregexpr(sdas,a2) [[1]] [1] 2 attr(,match.length) [1] 4 attr(,index.type) [1] chars attr(,useBytes) [] TRUE[[2]] [1] 5 attr(,match.length) [1] 4 attr(,index.type) [1] chars attr(,useBytes) [1] TRUE[[3]] [1] -1 attr(,match.length) [1] -1 attr(,index.type) [1] chars attr(,useBytes) [1] TRUE注正则表达式有很多使用场景多用于处理文本比较复杂各位感兴趣可自行百度CSDN上有许多优秀资源 数学运算与模拟 这部分介绍部分常用与数学计算与模拟的函数 1.sum()函数求和函数 a-c(1:5)sum(a) #对a中的元素求和 [1] 152.prod()函数,求连乘 a-c(1:5)prod(a) [1] 1204.factorial()函数求阶乘 factorial(6) [1] 7205.max()函数求最大值min()函数求最小值range()函数同时返回最小值与最大值 a [1] 1 2 3 4 5max(a) [1] 5min(a) [1] 1range(a) #同时返回最小值与最大值 [1] 1 5c(min(a),max(a)) #同时返回最小值与最大值 [1] 1 56.which.max()函数返回最大元素的位置which.min()函数返回最小元素的位置 a1-c(3,5,1,8)which.max(a1) #最大元素位置是4 [1] 4which.min(a1) #最大元素位置是3 [1] 37.median()函数求中位数 a [1] 1 2 3 4 5median(a) [1] 38.var()函数计算方差 a [1] 1 2 3 4 5var(a) [1] 2.59.rev()函数对元素去逆序列 a [1] 1 2 3 4 5a-rev(a)a [1] 5 4 3 2 110.sort()函数将元素按升序排列order()函数从小的到大的返回他们各自的位置 a [1] 5 4 3 2 1a-sort(a)a [1] 1 2 3 4 5a5-c(11,50,23,37,44)order(a5) #11最小的位置是123第二小位置是3第三小37位置为4····· [1] 1 3 4 5 211.cumsum()函数累计和第n个元素是1加到n的和 a [1] 1 2 3 4 5a-cumsum(a)a [1] 1 3 6 10 1512.pmax(a,b)函数返回一个向量第i个元素是a[i]与b[i]中的最大值、pmin()函数返回一个向量第i个元素是a[i]与b[i]中的最小值如 a2-c(1,2,3,4)a3-c(2,4,3,6)pmax(a2,a3) #结果第一个元素是a2[1]与a3[1]两个中的最大值其他类推 [1] 2 4 3 6pmin(a2,a3) [1] 1 2 3 413.match(x,y)函数返回一个和x的长度相同的向量表示x中与y中元素相同的元素在y中的位置没有则返回NA如 a2-c(1,2,3,4)a3-c(2,4,3,6)match(a2,a3) [1] NA 1 3 2#解析a2中的第一个元素在a3中没有返回NAa2中的第二个元素在a3中的第1个有返回1以此类推14.choose(n,k)求组合数从n个中选出k, choose(5,3) #5×4×3÷3÷2÷110 [1] 1015.unique(x),如果x是一个向量或者数据框则返回一个类似的对象但是去掉所有重复的元素对于重复的元素只取一个,举例如下 a4-c(1,2,4,5,6,7,7,7,7,4,4,4,2,2,2)unique(a4) #对重复的对象只取一次 [1] 1 2 4 5 6 716.union(x,y)函数求x,y并集intersect(x,y)函数求x,y交集setdiff(x,y)函数相当于先求x,y交集在求差集举例如下 a5-c(1,2,3,4,5,6)a6-c(4,5,6,7,8,9)union(a5,a6) [1] 1 2 3 4 5 6 7 8 9intersect(a5,a6) [1] 4 5 6setdiff(a5,a6) [1] 1 2 3setdiff(a6,a5) [1] 7 8 917.x%in%y判断x,y向量元素是否相同相同的返回TRUEsetequal(x,y)函数判断x,y向量是否完全相同返回逻辑值举例如下 a5-c(1,2,3,4,5,6)a6-c(4,2,6,4,8,9)a5%in%a6 [1] FALSE TRUE FALSE TRUE FALSE TRUEsetequal(a5,a6) [1] FALSEsetequal(c(1,2,3),c(1,2,3)) [1] TRUER语言画图 此部分只了解两个内容一是R自带的plot函数画图二是ggplot2函数 plot函数 R自带的画图工具R绘图基础图形系统的核心 plot()函数,plot 是一个泛型函数使用plot 时真正被调用的时函数依赖于对象所属的类。 plot(x, y NULL, type p, xlim NULL, ylim NULL,log , main NULL, sub NULL, xlab NULL, ylab NULL,ann par(ann), axes TRUE, frame.plot axes,panel.first NULL, panel.last NULL, asp NA, ...) plot函数中有许多的参数我这里解释基础的部分。 其中x,y指横纵坐标对应的参数 1.图片的保存 保存图片使用下列函数保存PDF文件PDF文件可以放大后不会模糊。 pdf(文件名.pdf) #作图语句 dev.off() #作图完成后关闭返回结果1.什么参数都不设置(最简单的散点图)如 a-c(10,15,20,25,30,35)b-c(12,23,27,44,56,63)plot(a,b)结果如下 2.par()函数图布局 就是Rstudio右下角画图区域可以设置一个页面多少张图可以进行布局默认一张使用par参数进行设置图布局par(mfrowc(行列)按行排列par(mfcolc(行列)按列排列。 R绘图区域界面公共分为三个部分outer margins、figure region、plot region。一般情况下R绘图区域没有out margin区域标签、轴名称和标题在figure region区域画的线条之类的都在plot region区域。 这里我直接用代码展示区域我使用box()函数描绘各区域边框部分参数如下 参数作用which在当前图形上绘制边框参数可以选择 plo他、figure、inner、outer。col边框颜色lwd边框大小········ par(omac(3,3,3,3)) #请把注意里放在par函数与box函数上其他函数后面会提及lines1-plot61-plot(a,b,typeb,pch23,colblue,col.axis2,xlimc(0,40),ylimc(5,65),col.main2,col.subblue,main红色框里的为plot区域,subplot61)lines2-lines(c(5,10,20,25,32,35),c(5,25,35,45,50,55),typeb,pch21,colred)legend(topleft,inset0.05,cex0.8,titlelines,c(lines1,lines2),pchc(23,21),text.col2)text(27,60,lines1,colblue)text(35,45,lines2,colred)box(whichplot,colred,lwd2)box(whichinner,colblack,lwd4)box(whichfigure,colblue,lwd3)box(whichouter,colgreen,lwd5)红色框内为plot区域蓝色内部为plot area区域蓝色与红色之间为margin区域绿色与蓝色之间为out margin area区域结果如下 par有许多参数其中与plot部分一样比如col;lwd;lty;font;cex等常用参数如下 参数作用、mfcol分割画图区域一个大图分割成几个子图按列绘制子图mfrow分割画图区域一个大图分割成几个子图按行绘制子图mgp设置标题、坐标轴名称、坐标轴距离图形边框的距离默认是标题为3坐标轴名称为1坐标轴为0oma设置外边界omac(下左上右)例如omac(2,3,4,3),下边距2左边距3上边距4右边距3。 #这里看不懂的跳过后面回来看这是后面一点的代码其中参数后面会提及我这里只举例par函数的用法par(omac(2,1,2,0.5),colblue,mgpc(2,1,0),bgblack)lines1-plot51-plot(a,b,typeb,pch23,colblue,col.axis2,xlimc(0,40),ylimc(5,65),col.main2,col.subblue,main背景为黑,subplot51)lines2-lines(c(5,10,20,25,32,35),c(5,25,35,45,50,55),typeb,pch21,colred)legend(topleft,inset0.05,cex0.8,titlelines,c(lines1,lines2),pchc(23,21),text.col2)text(27,60,lines1,colblue)text(35,45,lines2,colred)如果嫌弃Rstudio画图区域太小还可使用dev.new()函数在外部建一个画图区域个人感觉这种方式更模糊一点 3.main :设置主标题sub:副标题 plot(a,b,main主标题位置,sub副标题位置)结果如下 4.type,指线的类型 tybe参数可选值线条类型tybe“p”点图tybe“l”线图tybe“b”同时绘制点和线tybe“c”仅绘制参数b所示的线tybe“o”同时绘制点和线且线穿过点tybe“h”绘制出点到横坐标轴的垂直线tybe“s”阶梯图先横后纵tybe“S”阶梯图先纵后横tybe“n”空图 举例如下 par(mfrowc(2,2)) #表示画图的布是两行两列的只能最多画四个图plot2-plot(a,b,typep,main点图,subplot2)plot3-plot(a,b,typel,main线图,subplot3)plot4-plot(a,b,typeb,main点线图,subplot4)plot5-plot(a,b,typec,main点线图去掉点,subplot5)结果如下 par(mfrowc(2,2))plot6-plot(a,b,typeo,main同时绘制点和线线穿过点,subplot6)plot7-plot(a,b,typeh,main绘制出点到横坐标轴的垂直线,subplot7)plot8-plot(a,b,types,main阶梯图先横后纵,subplot8)plot9-plot(a,b,typeS,main阶梯图先纵后横,subplot9)结果如下 5.pch : 指定绘制点时使用的符号 21~24号可以指定点的边界颜色(col)和点的填充色(bg) 这里举几个例子 par(mfrowc(2,1))p1-plot(a,b,typeb,pch5,main例1)p2-plot(a,b,typeb,pch23,colred,bg9,main例2)结果如下 还可以自定义pch,(有些形状不行 plot(a,b,typeb,pch6,colred,bg6)结果如下 6.cex : 指定符号的大小默认是1 指定点的大小如 plot(a,b,typeb,pch*,cex2)结果如下 cex家族还可以指定其他部位的大小 参数作用cex.axis坐标轴大小cex.lab坐标轴标签的大小cex.main主标题大小cex.sub副标题大小举一个例子如 plot(a,b,typeb,pch*,cex.axis2,cex.lab2)结果如下 绘图时为了美观尽量不要改变更改默认值除非不美观这里的图为了直观展示所以画的不太好看 7.lty:指定绘制线条时的类型lwd:指定线条粗细 线条类型 a1-c(12,22,32,42,52,62)b1-c(12,22,32,42,52,62)par(mfrowc(3,2))plot(a1,b1,typeb,pch*,lty1,mainlty1 实线)plot(a1,b1,typeb,pch*,lty2,mainlty2 虚线)plot(a1,b1,typeb,pch*,lty3,mainlty3 点线)plot(a1,b1,typeb,pch*,lty4,mainlty4 点短虚线)plot(a1,b1,typeb,pch*,lty5,mainlty5 长虚线)plot(a1,b1,typeb,pch*,lty6,mainlty6 点长虚线)结果如下 线条粗细 线条粗细使用lwd 参数直接用数字表示粗细如 par(mfrowc(2,1))plot(a1,b1,typeb,pch*,lty1,mainlty1 lwd1 实线,lwd1)plot(a1,b1,typeb,pch*,lty1,mainlty1 lwd2 实线,lwd2)结果如下 线条颜色 使用col设置线条颜色 参数作用col默认的绘图颜色有些函数可以有不同操作比如某些函数可以接受一个含有颜色的向量并自动循环使用colc(“blue”,“white”)绘制三条线时第一条为蓝色第二条为白色第三条为蓝色col.axis坐标轴刻度文字颜色col.lab坐标轴标签的颜色col.main标题颜色col.sub副标题颜色fg图形的前景色bg图形的背景色 设置颜色有多种方式比如通过颜色下标颜色名称十六进制颜色值等 使用colors()函数可以返回查看R中可使用的657中颜色名称. 如 使用举例如下 par(mfrowc(2,1))plot(a1,b1,typeb,pch*,lty1,main线条颜色为blue,colblue,lwd1.5)plot(a1,b1,typeb,pch*,lty1,main线条颜色为粉红色,col2,lwd2)结果如下 col参数部分举例如下 par(mfrowc(3,2))plot11-plot(a,b,typeb,pch*,col.axis2,main坐标轴刻度颜色为红,subplot11)plot12-plot(a,b,typeb,pch*,col.lab2,main坐标轴标签颜色为红,subplot12)plot13-plot(a,b,typeb,pch*,col.main2,main标题颜色为红,subplot13)plot14-plot(a,b,typeb,pch*,col.sub2,main副标题颜色为红,subplot14)plot15-plot(a,b,typeb,pch*,fg2,main图形的前景色为红,subplot15)plot16-plot(a,b,typeb,pch23,bg2,main点的类型23背景色为红,subplot16)结果如下 8.坐标轴标签 使用xlab与ylab参数设置横纵坐标标签举例如下 par(mfrowc(2,1))plot17-plot(a,b,typeb,pch*,xlab横坐标标签,col.main2,main设置横坐标标签举例,subplot15)plot18-plot(a,b,typeb,pch*,ylab纵坐标标签,col.main2,main设置横坐标标签举例,subplot16)结果如下 9.坐标轴范围 使用xlim与ylim参数设置坐标轴范围举例如下 par(mfrowc(3,1))plot19-plot(a,b,typeb,pch*,xlimc(0,40),col.main2,main设置横坐标范围后图例,subplot19)plot20-plot(a,b,typeb,pch*,ylimc(5,65),col.main2,main设置横坐标范围后图例,subplot20)plot21-plot(a,b,typeb,pch*,xlimc(0,40),ylimc(5,65),col.main2,main设置横纵坐标范围后图例,subplot21)结果如下 注我的屏幕太小了一次画三个图无法展示全纵坐标数值现提出一个更直观展示上面第三个图如下 10.字体设置 使用font参数设置字体。font1 表示常规字体2 表示粗体3 表示斜体4 表示粗斜体5 表示符号字体 字体参数作用font.axis坐标轴字体font.lab坐标轴标签字体font.main主标题字体font.sub副标题字体family字体家族“serif”表示衬线“sans”表示无衬线“mono”表示等宽 举例如下 a2-c(1,2,3,4,5)b2-c(1,2,3,4,5)plot22-plot(a2,b2,typeb,pch*,font.axis4,xlab横坐标a2,ylab纵坐标b2,main坐标轴字体,subplot22)plot23-plot(a2,b2,typeb,pch*,font.lab4,xlab横坐标a2,ylab纵坐标b2,main坐标轴标签字体,subplot23)plot24-plot(a2,b2,typeb,pch*,font.main4,xlab横坐标a2,ylab纵坐标b2,main主标题字体,subplot24)结果如下 par(mfrowc(2,2))plot25-plot(a2,b2,typeb,pch*,font.sub4,xlab横坐标a2,ylab纵坐标b2,main副标题字体,subplot25)plot26-plot(a2,b2,typeb,pch*,familyserif,xlab横坐标a2,ylab纵坐标b2,main有衬线,subplot26)plot27-plot(a2,b2,typeb,pch*,familysans,xlab横坐标a2,ylab纵坐标b2,main无衬线,subplot27)plot28-plot(a2,b2,typeb,pch*,familymono,xlab横坐标a2,ylab纵坐标b2,main等宽,subplot28)结果如下 11.title()函数 title()函数为图形添加标题和坐标轴标签。举例如下 注意事项添加标题与标签是在原基础上添加如果原先有标题或者标签则新加入的会与之重叠下面第二个图所以在要加入新的标签或标题要把原先的删掉我这里直接把原来的赋予空值 par(mfrowc(3,1))a2-c(1,2,3,4,5)b2-c(1,2,3,4,5)plot29-plot(a2,b2,typeb,pch*)plot29-plot(a2,b2,typeb,pch*)title(main这是标题,sub这是副标题,xlab标签1,ylab标签2)plot30-plot(a2,b2,typeb,pch*,xlab,ylab)title(main这是标题,sub这是副标题,xlab标签1,ylab标签2)结果如下 12.abline()函数添加线 在原有图的基础上添加线可以使用abline()函数abline(a,b,hx,vx)其中 a 表示截距b 表示斜率 h 表示与横坐标平行的线v 表示与纵坐标平行的线如 a-c(10,15,20,25,30,35)b-c(12,23,27,44,56,63)par(mfrowc(2,1))plot31-plot(a,b,typel,pch*,colblue,xlimc(0,40),ylimc(5,65),col.main2,col.subblue,main水平线,subplot31)abline(hc(20,35,55),vc(15,25),colred)plot32-plot(a,b,typel,pch*,colblue,xlimc(0,40),ylimc(5,65),col.main2,col.subblue,main截距为20斜率为1,subplot32)abline(a20,b1,colred) #截距为20斜率为1结果如下 13.lines()函数在现有图形上添加线 在现有图形上添加线可以使用lines函数lines(x, y NULL, type “l”, …)举例如下 a-c(10,15,20,25,30,35)b-c(12,23,27,44,56,63)plot33-plot(a,b,typel,pch*,colblue,xlimc(0,40),ylimc(5,65),col.main2,col.subblue,main添加线,subplot33)lines(c(5,10,20,25,32,35),c(5,25,35,45,50,55),typeb,colred)结果如下 14.layout()函数图布局 使用layout()函数划分绘图页面将一张绘图页面类似于矩阵划分为多个区域可设置某图形的特定行高与列宽 layout(mat, widths rep.int(1, ncol(mat)),heights rep.int(1, nrow(mat))····) layout.show(n 1) lcm(x) mat为矩阵用于划分绘图窗口矩阵里0表示此位置不画图非零元素从1开始必须为整数值非0元素的大小就是绘图顺序比如132。先画1后2位置后画3位widths设置上列的宽度绝对宽度用lcm()指定相对宽度用数值设置。heights设置行高度用法与widths一样n指要绘制图形的数量。 具体举例可以看下面代码例子里 layout(matrix(c(1,1,2,1,1,3),2,3,byrowT)) #设置画图区域及顺序lines1-plot51-plot(a,b,typeb,pch23,colblue,col.axis2,xlimc(0,40),ylimc(5,65),col.main2,col.subblue,main添加文字,subplot51)lines2-lines(c(5,10,20,25,32,35),c(5,25,35,45,50,55),typeb,pch21,colred)legend(topleft,inset0.05,cex0.8,titlelines,c(lines1,lines2),pchc(23,21),text.col2)text(27,60,lines1,colblue)text(35,45,lines2,colred)plot49-plot(a,b,typel,pch23,colblue,xlimc(0,40),ylimc(5,65),col.main2,col.subblue,main关键字为center图9,subplot49)lines(c(5,10,20,25,32,35),c(5,25,35,45,50,55),typeb,pch21,colred)legend(center,inset0.05,cex0.4,title图例,c(线1,线2),pchc(23,21 ),text.col2)plot50-plot(a,b,typel,pch23,colblue,xlimc(0,40),ylimc(5,65),col.main2,col.subblue,main添加线,subplot33)lines(c(5,10,20,25,32,35),c(5,25,35,45,50,55),typeb,pch21,colred)legend(bottomleft,inset0.05,cex0.4,title图例,c(线1,线2),pchc(23,21 ),text.col2)结果如下 15.添加图例 使用legend()函数添加图例 legend(x, y NULL, legend, col par(“col”), border “black”, lty, lwd, pch,text.width NULL, text.col par(“col”),text.font NULL, plot TRUE,inset 0, title.col text.col[1]······· ) 这里只介绍简单的图例参数很多很多可以自行摸索。 图例有许多的关键字可以设置关键字放置图例位置还可以直接点击移动图例手动设置位置关键字如bottom、bottomleft、left、topleft、top、topright、right、bottomright、center。如果用了关键字还可以使用inset参数设置图例向图形内测移动的大小用绘图取余大小的分数表示。cex设置图例字体大小。 以下举例用于展示使用了关键字图例显示位置以及展示layout函数使用。 layout(matrix(c(1,2,3,4),2,2))#列排按矩阵排法画图2行2列plot41-plot(a,b,typel,pch23,colblue,xlimc(0,40),ylimc(5,65),col.main2,col.subblue,main关键字bottom,图1,subplot41) lines(c(5,10,20,25,32,35),c(5,25,35,45,50,55),typeb,pch21,colred)legend(bottom,inset0.05,cex0.4,title图例,c(线1,线2),pchc(23,21 ),text.col2)plot42-plot(a,b,typel,pch23,colblue,xlimc(0,40),ylimc(5,65),col.main2,col.subblue,main关键字bottomleft图2,subplot42)lines(c(5,10,20,25,32,35),c(5,25,35,45,50,55),typeb,pch21,colred)legend(bottomleft,cex0.4,inset0.05,title图例,c(线1,线2),pchc(23,21 ),text.col2)plot43-plot(a,b,typel,pch23,colblue,xlimc(0,40),ylimc(5,65),col.main2,col.subblue,main关键字left图3,subplot43)lines(c(5,10,20,25,32,35),c(5,25,35,45,50,55),typeb,pch21,colred)legend(left,inset0.05,cex0.4,title图例,c(线1,线2),pchc(23,21 ),text.col2)plot44-plot(a,b,typel,pch23,colblue,xlimc(0,40),ylimc(5,65),col.main2,col.subblue,main关键字topleft图4,subplot44)lines(c(5,10,20,25,32,35),c(5,25,35,45,50,55),typeb,pch21,colred)legend(topleft,inset0.05,cex0.4,title图例,c(线1,线2),pchc(23,21 ),text.col2)结果如下 layout(matrix(c(1,2,3,4,5,0),2,3,byrowT)) #按行排列绘图plot45-plot(a,b,typel,pch23,colblue,xlimc(0,40),ylimc(5,65),col.main2,col.subblue,main关键字top图5,subplot45)lines(c(5,10,20,25,32,35),c(5,25,35,45,50,55),typeb,pch21,colred)legend(top,inset0.05,cex0.4,title图例,c(线1,线2),pchc(23,21 ),text.col2)plot46-plot(a,b,typel,pch23,colblue,xlimc(0,40),ylimc(5,65),col.main2,col.subblue,main关键字topright图6,subplot46)lines(c(5,10,20,25,32,35),c(5,25,35,45,50,55),typeb,pch21,colred)legend(topright,inset0.05,cex0.4,title图例,c(线1,线2),pchc(23,21 ),text.col2)plot47-plot(a,b,typel,pch23,colblue,xlimc(0,40),ylimc(5,65),col.main2,col.subblue,main关键字为rigth图7,subplot47)lines(c(5,10,20,25,32,35),c(5,25,35,45,50,55),typeb,pch21,colred)legend(right,inset0.05,cex0.4,title图例,c(线1,线2),pchc(23,21 ),text.col2)plot48-plot(a,b,typel,pch23,colblue,xlimc(0,40),ylimc(5,65),col.main2,col.subblue,main关键字为bottomright图8,subplot48)lines(c(5,10,20,25,32,35),c(5,25,35,45,50,55),typeb,pch21,colred)legend(bottomright,inset0.05,cex0.4,title图例,c(线1,线2),pchc(23,21 ),text.col2)plot49-plot(a,b,typel,pch23,colblue,xlimc(0,40),ylimc(5,65),col.main2,col.subblue,main关键字为center图9,subplot49)lines(c(5,10,20,25,32,35),c(5,25,35,45,50,55),typeb,pch21,colred)legend(center,inset0.05,cex0.4,title图例,c(线1,线2),pchc(23,21 ),text.col2)结果如下 16.在图上添加文字 使用text()函数可在图形任意位置添加文字。 在图片上标上线条名称,举例如下 lines1-plot51-plot(a,b,typeb,pch23,colblue,col.axis2,xlimc(0,40),ylimc(5,65),col.main2,col.subblue,main添加文字,subplot51)lines2-lines(c(5,10,20,25,32,35),c(5,25,35,45,50,55),typeb,pch21,colred)legend(topleft,inset0.05,cex0.8,titlelines,c(lines1,lines2),pchc(23,21),text.col2)text(27,60,lines1,colblue)text(35,45,lines2,colred)结果如下 在无法准确获取图片坐标的情况下可以使用函数locator()获取精确坐标只需运行下面代码后再图片上点击你想获取坐标的位置会返回坐标结果。 locator(1) #直接回车点击图片上想获取坐标的位置17.R的撤销图片操作 使用recordplot()与replayplot()函数保存与撤销操作解释如下 #plot1-plot(·······)chetu-recordplot() #记录plot1绘制的图chetu 这个东西是随便设哈text(········ #加上文字不一定是text还可以其他函数只要再图上 #(接上行)进一步操作plot1都可以撤回replayplot(chetu) #撤回上一步操作到这里R自带的plot函数部分参数介绍到这里自带的画图函数还是具有局限性建议使用ggplot2包画图可以画多种多样的图美观漂亮个人感觉ggplot2难一点参数用法多这里我就不介绍了太难讲了细节太多。 ***** 个人感觉R代码深入学习后具有强烈的创造性在面对实际应用分析不同数据时具有很高的灵活性。 ***** 致读者本篇文章所有代码为原所创内容为学完R后的个人总结文章中的大部分函数因为参数复杂丰富没有一一举例所以如果文章内容或代码有问题欢迎各位大佬评论区留言批评指正同志们加油。
http://www.zqtcl.cn/news/20756/

相关文章:

  • 最简单的网站开发工具省级住房城乡建设主管部门网站
  • python新手代码图片seo优化是什么意思
  • 百度秒收录的网站定制网站开发公司生物医药
  • 在线看seo网站网站建设系统开发感想与收获
  • 网站颜色背景代码企业信息平台系统
  • 思行做网站海南省城乡住房建设厅网站
  • 电子商务型网站中国互联网网站性能
  • 模板网站建设哪家好刚刚廊坊发生大事了
  • 北京网站优化培训网站策划建设方法
  • 域名备案时网站名字如何进行企业营销型网站建设
  • 做婚恋网站的思路关键字优化
  • 如何做外贸成都做整站优化
  • 电商网站建设课程建筑网片的用途有哪些
  • 想开个网站建设的公司中国建设银行网站维护
  • 文登区住房和城乡建设局网站网站建设咨询费用
  • 单页网站开发丽江建网站
  • 营销型网站建设概述wordpress前台空白
  • 交友高端网站建设哈尔滨建设局官网
  • 宁波怎么建网站模板什么是网络营销最不能忽视的市场细分标准
  • 怎么做网站导航地图网络科技有限公司的简介
  • 锦州哪家做网站西安市住房和城乡建设局门户网站
  • 江华县网站开发旅游网站推荐排行榜
  • 南通通州区城乡建设局网站看不到的网站
  • 镇江海绵城市建设官方网站官方网站制作
  • 装修公司网站建设的意义软件商店oppo官方下载
  • 公司和网站备案查询密码wordpress 雪花插件
  • wordpress主题样式乱深圳整站seo
  • 装修设计案例网站深圳网站推广策划
  • 电子商务网站服务器微博推广方式有哪些
  • 局网站内容建设考核网站开发外包公司坑