r语言_r语言绘图 - CSDN
r语言 订阅
R是用于统计分析、绘图的语言和操作环境。R是属于GNU系统的一个自由、免费、源代码开放的软件,它是一个用于统计计算和统计制图的优秀工具。 展开全文
R是用于统计分析、绘图的语言和操作环境。R是属于GNU系统的一个自由、免费、源代码开放的软件,它是一个用于统计计算和统计制图的优秀工具。
信息
诞生地
新西兰 奥克兰大学
外文名
The R Programming Language
开发者
Ross Ihaka,Robert Gentleman
中文名
R语言
功    能
统计分析、绘图
R语言发展历史
R是统计领域广泛使用的诞生于1980年左右的S语言的一个分支。可以认为R是S语言的一种实现。而S语言是由AT&T贝尔实验室开发的一种用来进行数据探索、统计分析和作图的解释型语言。最初S语言的实现版本主要是S-PLUS。S-PLUS是一个商业软件,它基于S语言,并由MathSoft公司的统计科学部进一步完善。后来新西兰奥克兰大学的Robert Gentleman和Ross Ihaka及其他志愿人员开发了一个R系统。由“R开发核心团队”负责开发。R可以看作贝尔实验室(AT&T BellLaboratories)的RickBecker,JohnChambers和AllanWilks开发的S语言的一种实现。当然,S语言也是S-Plus的基础。所以,两者在程序语法上可以说是几乎一样的,可能只是在函数方面有细微差别,程序十分容易地就能移植到一程序中,而很多一的程序只要稍加修改也能运用于R。
收起全文
精华内容
参与话题
  • R语言入门基础

    千人学习 2019-06-01 21:11:46
    本课程旨在帮助学习者快速入门R语言: 课程系统详细地介绍了使用R语言进行数据处理的基本思路和方法。 课程能够帮助初学者快速入门数据处理。 课程通过大量的案例详细地介绍了如何使用R...
  • R语言数据分析入门

    千人学习 2016-05-13 16:53:58
    R语言是一种用来进行数据探索、统计分析、作图的解释型语言。它具有丰富的数据类型、灵活多样的作图功能,以及数量众多的算法功能包。目前已在各行各业赢得数据分析者的青睐,并成为众多科研工作者、商业机构、与...
  • R语言是什么?

    万次阅读 多人点赞 2018-06-17 18:56:38
    1什么是R语言R语言,顾名思义,它首先是一门计算机的编程语言,就跟传统的C语言,Java语言类似,但是,它又不仅仅是一门计算机语言。这是因为,R语言天生为统计而生,所以,它做不到像C语言那般的普适,数据分析、...

    1什么是R语言?

    R语言,顾名思义,它首先是一门计算机的编程语言,就跟传统的C语言,Java语言类似,但是,它又不仅仅是一门计算机语言。这是因为,R语言天生为统计而生,所以,它做不到像C语言那般的普适,数据分析、统计建模、数据可视化才是它的舞台。

    R语言天生为统计而生, 数据分析、统计建模、数据可视化才是它的舞台。

    2为什么要学习R语言?

    做过一点数据分析的人都知道,目前市场上最流行的统计分析软件是SPSS,不可否认,这个软件很好用,傻瓜式的点击操作,一目了然的表格式的结果,甚至也能画一些简单的图形。但是,相信在很多时候,当你使用SPSS进行数据分析时,你也会觉得束手无策,不是你不够聪明,而是SPSS实在是巧妇难为无米之炊。点击操作固然方便简单,但是在功能的灵活性上却大打折扣。故而,你想到了SAS。不过,在你使用SAS之前,请你先找一个正版的安装包(什么破解版就不推荐了,毕竟我们要推崇版权意识嘛),在你的Windows系统上装上它再说吧。SAS就是一个航空母舰,战斗力强大,但是却显得异常臃肿,我很好奇一个界面完全算不上好看的统计软件,是如何把自己的安装包一步一步升级到一个极品飞车安装包的级别的。笔者不才,曾经试图两次安装SAS,但是由于并不精通计算机系统,故而两次均以失败告终,万般无奈之际,选择了R语言。

    山重水复疑无路,柳暗花明又一村。R语言在前几年的名气远不及SPSSSAS,甚至一度有很多人压根就看不上这样一个软件,认为它做出来的东西很有可能是错误的,压根就不靠谱。但是质疑声永远也不能阻止一个新生事物的快速发展。坦白说,我入了R的坑,从此SPSSSAS是路人!

    R是免费的!安装包仅有70M,而且安装异常简单,所需操作环境十分随意。就是这样一个十分亲民友好的软件,功能却是异常强大!我用的不是非常,而是异常!作为一名还不算资深的R粉,在我的数据清洗与数据分析的过程中,我深深的被R语言的简洁强大震撼到了。而且我十分赞赏R语言所推崇的“向量化操作”的理念:不写循环,但是能做循环一样的事儿。

    关于R,难以一言以蔽之,它就像一个航母战斗群,不同的军舰承载着不同的任务,但是彼此和谐相处,毫不冲突。正如前言所说,R是为统计而生,但是随着这几年的快速发展,R的功能范围已经得到了极大的扩展,比如自然语言处理,机器学习领域,生物信息学领域等等。即便如此,也永远不要忘了,R语言自身的统计功能!

    现如今,在R的队伍中,已经存在了超过12000个扩展包,这些扩展包来自不同领域的牛人之手。所以,只要你想得到,没有R做不到!因为你想到的,人家早就已经替你想过了。

    3R语言能做什么?靠谱吗?

    首先说靠不靠谱这件事,真的是有点老生常谈了,很多人习惯性的认为免费的东西就是不好的东西,这样一竿子打死所有,是不合理的,有点酸葡萄的心理。笔者曾经在PubMed上见到很多的文章都是用R语言做的统计分析,其中不乏顶级期刊,诸如LancetJCO这样的。上图,无图无真相。

    窥一斑而见全豹。所以关于靠不靠谱这事,到此为止。

    下面说说R能做啥。对于医学科研工作者来说,对于软件的需求其实真的不是很大,基本的统计分析基本能够满足我们。但是,当我们碰到复杂的数据时,也不要怕,从数据的预处理到数据的分析建模,以及后续的绘图,R都能帮你搞定。关于数据预处理和初步分析,在这里就不多说了,因为我没办法上图(可以浏览“医学方”所推出的“一本R书走天涯”推文教程和视频教程)。下面说说R的可视化功能。各位看官瞧好了。

    1

    基本的统计图

    2

    火山图

    3

    地图

    4

    3D图

    实在是太多了,难以一一枚举。总之,R有一个非常强大的数据可视化宝库,该怎么用就看你的了。

    4如何学习R语言?

    R语言作为一门编程语言,学习起来自然是有点难度的,但是大家也不要害怕。接触任何新事物,总有一个过程。目前市面上关于R语言的数据甚多,而且医学方也推出了R语言的培训课程。在那个课程里面,笔者将R语言的基础入门知识进行了系统讲解,帮助大家快速掌握R语言的基本操作。有了这些基本技能,你想进一步挖掘,就会变得轻松很多。

    不要迟疑了,要想做科研,快用R语言!

    展开全文
  • 终于,我也出了篇R语言入门手册!

    万次阅读 多人点赞 2018-08-19 14:05:55
    作者:周运来,男,长大了才会遇到的帅哥,稳健,潇洒,大方,靠谱。大型测序工厂的螺丝钉,一个R者,一个随机森林中靠统计觅食的人。1. 什么是R语言R语言是一个开源的数据分析...
        

    作者:周运来,男,长大了才会遇到的帅哥,稳健,潇洒,大方,靠谱。大型测序工厂的螺丝钉,一个R者,一个随机森林中靠统计觅食的人。



    640?wx_fmt=png


    1. 什么是R语言

    R语言是一个开源的数据分析环境,起初是由数位统计学家建立起来,以更好的进行统计计算和绘图,这篇wiki中包含了一些基本情况的介绍。由于R可以通过安装扩展包(Packages)而得到增强,所以其功能已经远远不限于统计分析,如果感兴趣的话可以到官方网站了解关于其功能的更多信息。

    至于R语言名称的由来则是根据两位主要作者的首字母(Robert Gentleman and Ross Ihaka),但过于简短的关键词也造成在搜索引擎中很不容易找到相关的资料。不过这个专门的搜索网站可以帮到你。

    640?wx_fmt=png


    2. 为什么要学习R语言

    给你一千个R的理由( 地址: https://www.burns-stat.com/documents/tutorials/why-use-the-r-language/ )可能你想说,“我已经学会了spss/sas/stata...,为什么还要去学习R呢?”

    如下几方面可能会吸引到你:

    1. 编程入门语言: 如果你之前没有编程经验,但是学习工作中经常需要计算、统计、绘图,那R是你的首选(Python也许不太同意,不管他)。语法结构简单,上手较快,而且函数和pckages都有很好的实例文档。R是一门自学型语言,来R吧,你不会孤独。

    2. R是免费开源软件:现在很多学术期刊都对分析软件有版权要求,而免费的分析工具可以使你在这方面不会有什么担心。另一方面,如果学术界出现一种新的数据分析方法,那么要过很长一段时间才会出现在商业软件中。但开源软件的好处就在于,很快就会有人将这种方法编写成扩展包,或者你自己就可以做这件工作。

    3. 命令行工作方式:许多人喜欢类似SPSS菜单式的操作,这对于初学者来说很方便入门,但对于数据分析来说,命令行操作会更加的灵活,更容易进行编程和自动化处理。而且命令行操作会更容易耍酷,不是嘛,一般人看到你在狂敲一推代码后得到一个分析结果,对你投来的目光是会不一样的。

    4. 小巧而精悍:R语言的安装包更小,大约不到40M,相比其它几个大家伙它算是非常小巧精悍了。目前R语言非常受到专业人士欢迎,根据对数据挖掘大赛胜出者的调查可以发现,他们用的工具基本上都是R语言。此外,从最近几次R语言大会上可以了解到,咨询业、金融业、医药业都在大量的使用R语言,包括google/facebook的大公司都在用它。因此,学习R语言对你的职业发展一定是有帮助的。

    640?wx_fmt=png


    3. R语言的学习方法
    学习R是一件非常轻松的事情,初学者需要记住的就是:

    利用丰富的帮助文档
    亲手键入代码并理解其意义
    在笔记里记下一些重点或心得(个人推荐Evernote)
    坚持练习,对手边的数据进行应用分析
    理解背景知识,细节很重要。

    R的获取

    640?wx_fmt=png

    640?wx_fmt=png

    R包(package):R函数、数据、帮助文件、预编译代码以一种定义完善的格式组成的集合。

    .libPaths("E:/Rstudio/R_packages") #指定安装包的路径联网安装
    install.packages(“vegan”) #安装普通包source(“https://bioconductor.org/biocLite.R”)#安装Bioconductor包biocLite("DESeq2")
    
    安装本地zip包
    Packages>install packages from local files
    library(vegan) #加载包,也可用require()update.packages("vegan") #包的更新installed.packages() #查看已安装的包

    640?wx_fmt=png


    640?wx_fmt=png

    1.基础数据结构

    1.1 向量

    # 创建向量a <-c(1, 2, 3, 4, 5, 6)
    b<-c("one", "two", "three")
    c<-c(TRUE, FALSE, TRUE, TRUE, FALSE)#向量索引a[2] #第二个元素a[-2] #删除第二个元素a[c(2:4)] #取出第二到第四个元素[1] 2[1] 2[1] 1 3 4 5 6

    640?wx_fmt=png

    1.2 矩阵

    #创建矩阵mymat <- matrix(c(1:10), nrow=2, ncol=5, byrow=TRUE)#矩阵索引mymat[2,] #取第二行mymat[,2] #取第二列mymat[1,5] #第一行第五列的元素

    640?wx_fmt=png

    1.3 数组

    #创建数组myarr <- array(c(1:12),dim=c(2,3,2))
    dim(myarr) #取矩阵或数组的维度myarr[1,2,1] #取第一个矩阵的第一行第二列

    1.4 数据框

    640?wx_fmt=png


    640?wx_fmt=png

    # 创建数据框kids <- c("Wang", "Li")
    age <- c("18", "16")
    df <- data.frame(kids, age)#数据框索引df[1,] #第一行df[,2] #第二列df[1:2,1:2]#前两行,前两列df$kids #根据列名称#数据框常用函数str(df) #数据框的结构rownames(df) #行名称colnames(df) #列名称


    1.4.1 因子变量

    变量:类别变量,数值变量
    类别数据对于分组数据研究非常有用。(男女,高中低)
    R中的因子变量类似于类别数据。

    #向量因子化status<-c("Poor", "Improved", "Excellent", "Poor") 
    status<-factor(status,ordered=TRUE,
        levels= c("Poor","Improved", "Excellent"),
        labels=c("P","I","E"))
    index <- sample(1:100,75)
    plotdata <- data.frame(index,status)
    attach(plotdata)
    boxplot(index~status,col="red")

    640?wx_fmt=png类别变量,有序变量称为因子,决定了数据的分析方式和视觉呈现形式

    Attach()可以将数据框添加到R的搜索路径中,当R遇到一个变量名后,将检测搜索路径中的数据框,定位这个变量


    1.5 列表

    列表以一种简单的方式组织和调用不相干的信息,R函数的许多运行结果都是以列表的形式返回

    #创建列表lis <- list(name='fred',
        wife='mary',
        no.children=3,
        child.ages=c(4,7,9))#列表索引lis$name #列表组件名lis[[1]] #列表位置访问
    常用函数

    640?wx_fmt=png

    640?wx_fmt=png

    R流程控制

    640?wx_fmt=png

    p <- 0.1 
    if(p<=0.05){  print("p<=0.05!")
    }else{  print("p>0.05!")
    }

    640?wx_fmt=png

    for(i in 1:10) {  print(i)
    }
    i <- 1while(i<10) 
       {    print(i)
        i <- i + 1
      }

    640?wx_fmt=png

    v <- LETTERS[1:6]for (i in v){  if(i == 'D'){
        next
      }  print(i)
    }

    640?wx_fmt=png

    v <- LETTERS[1:6]for (i in v){  if(i == 'D'){    break
      }  print(i)
    }


    2.5 R函数

    函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段

    rcal<-function(x,y){
      z <- x^2 + y^2; 
      result<-sqrt(z) ;
      result;
    }
    rcal(3,4)# 调用函数


    3. 读写数据

    #数据读入
    getwd()
    setwd('C:/Users/Administrator/Desktop/file') dir() top<-read.table("otu_table.p10.relative.tran.xls",header=T,row.names=1,sep='\t',stringsAsFactors = F) top10<-t(top) head(top10, n=2)#数据写出logtop10<-log(top10+0.000001) write.csv(logtop10,file="logtop10.csv", quote=FALSE,  row.names = TRUE) write.table(logtop10,file="logtop10.xls",sep="\t", quote=FALSE,    row.names = TRUE, col.names = TRUE)

    其他常用函数

    640?wx_fmt=png


    4.数据清理

    640?wx_fmt=png


    4.1 tidyr包

    tidyr包的四个函数
    宽数据转为长数据:gather()
    长数据转为宽数据:spread()
    多列合并为一列: unite()
    将一列分离为多列:separate()

    library(tidyr)
    gene_exp <- read.table('geneExp.csv',header = T,sep=',',stringsAsFactors = F)
    head(gene_exp) #gather 宽数据转为长数据gene_exp_tidy <- gather(data = gene_exp, key = "sample_name", value = "expression", -GeneID)
    head(gene_exp_tidy)#spread 长数据转为宽数据gene_exp_tidy2<-spread(data = gene_exp_tidy, key = "sample_name", value = "expression")
    head(gene_exp_tidy2)

    640?wx_fmt=png


    4.2 dplyr包

    dplyr包五个函数用法:
    筛选: filter
    排列: arrange()
    选择: select()
    变形: mutate()
    汇总: summarise()
    分组: group_by()

    library(tidyr)
    library(dplyr)
    gene_exp <- read.table("geneExp.csv",header=T,sep=",",stringsAsFactors = F)
    gene_exp_tidy <- gather(data = gene_exp, key = "sample_name", value = "expression", -GeneID)#arrange 数据排列gene_exp_GeneID <- arrange(gene_exp_tidy, GeneID)#降序加deschead(gene_exp_GeneID )#filter 数据按条件筛选gene_exp_fiter <- filter(gene_exp_GeneID ,expression>10)
    head(gene_exp_fiter)#select 选择对应的列gene_exp_select <- select(gene_exp_fiter ,sample_name,expression)
    head(gene_exp_select)

    640?wx_fmt=png


    5. 绘图

    640?wx_fmt=png


    5.1 长数据与宽数据

    640?wx_fmt=png

    library(tidyr)
    library(ggplot2)#基础绘图file <- read.table("geneExp.csv",header=T,sep=",",stringsAsFactors = F,row.names = 1)#宽数据file
    barplot(as.matrix(file),names.arg = colnames(file), beside =T ,col=terrain.colors(6))
    legend("topleft",legend = rownames(file),fill = terrain.colors(6))#ggplot2绘图gene_exp <- read.table("geneExp.csv",header=T,sep=",",stringsAsFactors = F)
    gene_exp_tidy <- gather(data = gene_exp, key = "sample_name", value = "expression", -GeneID)#长数据head(gene_exp_tidy)
    ggplot(gene_exp_tidy,aes(x=sample_name,y=expression,fill=GeneID)) + geom_bar(stat='identity',position='dodge')

    640?wx_fmt=png


    5.2 图形参数位置

    640?wx_fmt=png

    x <- rnorm(20, 2, 1)
    y <- rnorm(20, 4, 2)
    plot(x, y, cex=c(1:3), type="p", pch=19, col = "blue",
         cex.axis=1.5, col.axis="darkgreen", font.axis=2,
         main="这是主标题:plot初试", font.main=2, cex.main=2, col.main="green",
         sub="这是副标题:图1", font.sub=3, cex.sub=1.5, col.sub="red",
         xlab="这是x轴标签", ylab="这是y轴标签",cex.lab=1.5, font.lab=2, col.lab="grey20",
         xlim=c(0,3), ylim=c(0,7))
    abline(h=2, v=3, lty=1:2, lwd=2,col="red")
    legend("topright", legend="我是图例\n我在这儿",
          text.col="red", text.width=0.5)#Rnorm正态分布 个数 平均值 标准差 plot是泛型函数,根据输入类型的不同而变化#Type p 代表点 l 代表线 b 代表两者叠加

    640?wx_fmt=png

    • 图形参数:
      符号和线条:pch、cex、lty、lwd
      颜色:col、col.axis、col.lab、col.main、col.sub、fg、bg
      文本属性:cex、cex.axis、cex.lab、cex.main、cex.sub、font、font.axis、font.lab、font.main、font.sub

    • 文本添加、坐标轴的自定义和图例
      title()、main、sub、xlab、ylab、text()
      axis()、abline()
      legend()

    • 多图绘制时候,可使用par()设置默认的图形参数
      par(lwd=2, cex=1.5)

    • 图形参数设置:
      par(optionname=value,…)
      par(pin=c(width,height)) 图形尺寸
      par(mfrow=c(nr,nc)) 图形组合,一页多图
      layout(mat) 图形组合,一页多图
      par(mar=c(bottom,left,top,right)) 边界尺寸
      par(fig=c(x1,x2,y1,y2),new=TURE) 多图叠加或排布成一幅图

    #图形组合:attach(mtcars)
    opar <- par(no.readonly=TRUE) #复制当前图形参数设置par(mfrow=c(2,2))#设置图形参数#layout(matrix(c(1,2,2,3),2,2,byrow=TRUE))plot(wt,mpg,main="Scatterplot of wt vs mpg")
    hist(wt,main="Histogram of wt")
    boxplot(wt,main="Boxplot of wt")
    par(opar) #返回原始图形参数detach(mtcars)

    640?wx_fmt=png

    5.3 柱形图

    file <- read.table("barData.csv",header=T,row.names=1,sep=",",stringsAsFactors = F)
    dataxx <- as.matrix(file) #转化为矩阵cols <- terrain.colors(3) #抽取颜色#误差线函数plot.error <- function(x, y, sd, len = 1, col = "black") {
      len <- len * 0.05
        arrows(x0 = x, y0 = y, x1 = x, y1 = y - sd, col = col, angle = 90, length = len)
        arrows(x0 = x, y0 = y, x1 = x, y1 = y + sd, col = col, angle = 90, length = len) 
    } 
    x <- barplot(dataxx, offset = 0, ylim=c(0, max(dataxx) * 1.1),axis.lty = 1, names.arg = colnames(dataxx), col = cols, beside = TRUE) 
    box() 
    legend("topright", legend = rownames(dataxx), fill = cols, box.col = "transparent") 
    title(main = "An example of barplot", xlab = "Sample", ylab = "Value") 
    sd <- dataxx * 0.1 for (i in 1:3) {
      plot.error(x[i, ], dataxx[i, ], sd = sd[i, ])
    }

    640?wx_fmt=png

    5.4 二元图

    640?wx_fmt=png

    matdata <- read.table("plot_observed_species.xls", header=T)
    tbl_df(matdata) #查看数据属性和结构y<-matdata[,2:145]
    attach(matdata)
    matplot(series,y, 
            ylab="Observed Species Number",xlab="Sequences Number",
            lty=1,lwd=2,type="l",col=1:145,cex.lab=1.2,cex.axis=0.8)
    legend("topleft",lty=1, lwd=2, legend=names(y)[1:8], 
           cex=0.5,col=1:145)
    detach(matdata)

    640?wx_fmt=png

    5.5 饼状图

    relative<-c(0.270617,0.177584,0.194911,0.054685,0.048903,0.033961, 0.031195,0.188143)
    taxon<-c("Sordariales","Pleosporales","Agaricales","Hypocreales",   "Pezizales","Eurotiales","Helotiales","Others")
    ratio<-round(relative*100,2)
    ratio<-paste(ratio,"%",sep="")
    label<-paste(taxon,ratio,sep=" ")
    pie(relative,labels=label, main="ITS1-Sample S1",   radius=1,col=rainbow(length(label)),cex=1.3)
    library(plotrix)
    fan.plot(relative,labels=label,main="Fan plot")
    pie3D(relative,labels=label, height=0.2, theta=pi/4, explode=0.1, col=rainbow(length(label)),  border="black",font=2,radius=1,labelcex=0.9)

    640?wx_fmt=png

    5.6 直方图

    seqlength<-rnorm(1000, 350, 30)hist(seqlength,breaks=100,
         col="red",freq=FALSE, 
         main="Histogram with dengsitycurve",     ylab="Density", xlab="Sequence length")lines(density(seqlength),col="blue4",lwd=2)

    640?wx_fmt=png

    5.7 聚类图

    clu <- read.table("unweighted_unifrac_dm.txt", header=T, row.names=1, sep="\t")
    head(clu)
    dis <- as.dist(clu)
    h <- hclust(dis, method="average")
    plot(h, hang = 0.1, axes = T, frame.plot = F, main="Cluster Dendrogram based on unweighted_unifrac", sub="UPGMA")

    640?wx_fmt=png


    5.8 维恩图

    library(VennDiagram)
    ven<-list(sample1=20:50,  sample2=c(1:30,50:80), sample3=40:90, sample4=c(10:30,70:100))
    venn.diagram(ven, filename='venn.png', cex=1.2, col="black", alpha= 0.50,lwd =1.2, cat.cex=1.4,               fill=c("cornflowerblue", "green", "Gold1","darkorchid1"),  margin=0.15)

    640?wx_fmt=png

    图片输出

    • 直接导出


      640?wx_fmt=png

    • 命令

    pdf(file="file.pdf", width=7, height=10)
    png(file="file.png",width=480,height=480)
    jpeg(file="file.png",width=480,height=480)
    tiff(file="file.png",width=480,height=480)
    
    dev.off()

    参考资料:

    1. R|home https://www.r-project.org

    2. 雪晴网 http://www.xueqing.tv

    3. 统计之都 https://cosx.org

    4. R语言基础入门之一:引言

    https://www.cnblogs.com/wentingtu/archive/2012/03/03/2377969.html

    5. R语言在生态学研究中的应用分析

     http://blog.sciencenet.cn/blog-267448-1058416.html

    6.为什么生态学家要学习Python或者R?

    http://blog.sciencenet.cn/blog-255662-1093799.html

    7. Statistical tools for high-throughput data analysis http://www.sthda.com/french/

    8. why-use-the-r-language

    https://www.burns-stat.com/documents/tutorials/why-use-the-r-language/

    9. Why R? The pros and cons of the R language

    https://www.infoworld.com/article/2940864/application-development/r-programming-language-statistical-data-analysis.html

    10.Why use R? Five reasons

    https://www.r-bloggers.com/why-use-r-five-reasons/

    展开全文
  • &与&& ,|与||的区别

    万次阅读 2015-03-25 08:30:29
    &&和||是短路运算符,&和|是非短路运算符 &&与& 区别:两者都表示“与”运算,但是&&运算符第一个表达式不成立的话,后面的表达式不运算,直接返回。而&对所有表达式都得判断。 || 与|:两者都表示“或”运算,但是...

    &&和||是短路运算符,&和|是非短路运算符

    &&与&

    区别:两者都表示“与”运算,但是&&运算符第一个表达式不成立的话,后面的表达式不运算,直接返回。而&对所有表达式都得判断。

    || 与|

    区别:两者都表示“或”运算,但是||运算符第一个表达式成立的话,后面的表达式不运算,直接返回。而|对所有表达式都得判断。

    展开全文
  • R语言学习笔记

    千次阅读 2018-11-28 15:01:38
    Smith and the R DCT: Introduction to R – Notes on R: A Programming Environment for Data Analysis and Graphics, 2003. http://bayes.math.montana.edu/Rweb/Rnotes/R.html 前言:关于RR...

    参考:W.N. Venables, D.M. Smith and the R DCT: Introduction to R – Notes on R: A Programming Environment for Data Analysis and Graphics, 2003. http://bayes.math.montana.edu/Rweb/Rnotes/R.html

    前言:关于R

    在R的官方教程里是这么给R下注解的:一个数据分析和图形显示的程序设计环境(A system for data analysis and visualization which is built based on S language.)。

    R的源起

    R是S语言的一种实现。S语言是由 AT&T贝尔实验室开发的一种用来进行数据探索、统计分析、作图的解释型语言。最初S语言的实现版本主要是S-PLUS。S-PLUS是一个商业 软件,它基于S语言,并由MathSoft公司的统计科学部进一步完善。后来Auckland大学的Robert Gentleman 和 Ross Ihaka 及其他志愿人员开发了一个R系统。R的使用与S-PLUS有很多类似之处,两个软件有一定的兼容性。

    R is free

    R是用于统计分析、绘图的语言和操作环境。R是属于GNU系统的一个自由、免费、源代码开放的软件,它是一个用于统计计算和统计制图的优秀工具。
    R是一套完整的数据处理、计算和制图软件系统。其功能包括:数据存储和处理系统;数组运算工具(其向量、矩阵运算方面功能尤其强大);完整连贯的统计分析工具;优秀的统计制图功能;简便而强大的编程语言:可操纵数据的输入和输入,可实现分支、循环,用户可自定义功能。
    R是一个免费的自由软件,它有UNIX、LINUX、MacOS和WINDOWS版本,都是可以免费下载和使用的,在那儿可以下载到R的安装程序、各种外挂程序和文档。在R的安装程序中只包含了8个基础模块,其他外在模块可以通过CRAN获得。

    R的特点

    (1) 有效的数据处理和保存机制。
    (2) 拥有一整套数组和矩阵的操作运算符。
    (3) 一系列连贯而又完整的数据分析中间工具。
    (4) 图形统计可以对数据直接进行分析和显示,可用于多种图形设备。
    (5) 一种相当完善、简洁和高效的程序设计语言。它包括条件语句、循环语句、用户自定义的递归函数以及输入输出接口。
    (6) R语言是彻底面向对象的统计编程语言。
    (7) R语言和其它编程语言、数据库之间有很好的接口。
    (8) R语言是自由软件,可以放心大胆地使用,但其功能却不比任何其它同类软件差。
    (9) R语言具有丰富的网上资源

    一 入门训练

    1. 获取帮助

        > help.start() 开启帮助文档
        >help(solve) 显示某命令的帮助信息,或者
        >?solve
        对于由特殊字符指定的功能,这些参数必须用单引号或双引号括起来,使之成为一个“字符串”,> help("[[")
        与某个主题相关的例子通常可以用下面的命令得到
        > example(topic)
    

    2. 命令简介

    R对大小写是敏感的;名称不能以数字开始;
    基本的命令由表达式或者赋值语句组成。如果一个表达式被作为一条命令给出,它将被求值、打印而表达式的值并不被保存。
    一个赋值语句同样	对表达式求值之后把表达式的值传给一个变量,不过并不会自动的被打印出来;
    命令由分号(;)来分隔,或者另起新行;
    基本命令可以由花括号(f和g)合并为一组复合表达式;
    注释几乎可以被放在任何地方,只要是以井号( # )开始,到行末结束;
    如果一个命令在行末仍没有结束,R将会给出一个不同的提示符,默认的是‘+’。
    

    3. 命令文件的执行和输出转向到文件

    如果命令存储于一个外部文件中,比如工作目录work中的commands.R,他们可以随时在R的任务中被执行

    source(“commands.R”)在Windows中Source也可以由File菜单执行。
    函数sink,
    sink(“record.lis”)将把所有后续的输出由终端转向一个外部文件,record.lis。命令
    sink() 将把信息重新恢复到终端上。

    setwd("D:\\eclipse_photon\\work\\R")
    sink("record.list")
    source("test2.R")  #D:\eclipse_photon\work\R目录下会生成一个record.list文件,里面内容为[1] "hello world",控制台则不会输出
    sink()
    source("test3.R") #控制台会打印[1] "hello world after sink()"
    

    4. 数据的保持与对象的清除

    R所创建、操作的实体是对象。对象可以是变量、数组、字符串、函数以及由这些元素组成的其它结构;

    > objects()     用来显示目前存储在R中的对象的名字。而当前存储的所有对象的组合被称为workspace;
    清除对象可以使用rm命令:
    > rm(x, y, z, ink, junk, temp, foo, bar)
    所有在一个R任务中被创建的对象都可以在文件中被永久保存,并在其它的R任务中被使用。在每个R任务结束时用户都有机会保存当前有效的所有对象。如果用户这样做的话,对象将被写入当前目录一个名为.RData。当R被再次启动时R会从这个文件中再载入workspace。同时相关的命令记
    录也被载入。
    所以,推荐大家在用R进行不同的分析时分别使用不同的工作目录。
    

    5. 基本数据结构

    类型 实例
    数值型(numeric) 1,1.2,3.1415926
    复数型(complex) 1+2i
    字符型(character) ‘A’/ “hello world!”
    逻辑型(logical) TRUE / FALSE

    6. 基本数据对象

    向量(vector), 见下节
    矩阵(matrix)
    更一般的说数组是向量在多维情况下的一般形式。事实上它们是可以被两个或更多的指标索引的向量,并且以特定的方式被打印出来。
    **因子(factors) **提供了一种处理分类数据的更简介的方式。
    列表(list)
    是向量的一种一般形式,并不需要保证其中的元素都是相同的类型,而且其中的元素经常是向量和列表本身。
    数据框(data frame)
    是一种与矩阵相似的结构,其中的列可以是不同的数据类型。可以把数据框看作一种数据"矩阵",它的每行是一个观测单位,而且(可能)同时包含数值型和分类的变量。
    函数( function)
    能够在R的workspace中存储的对象。我们可以通过函数来扩展R的功能。

    二 简单操作,数值与向量

    2.1 向量与赋值

    R对命名了的数据结构进行操作。最简单的数据结构是数字向量;如,

    x <- c(10.4, 5.6, 3.1, 6.4, 21.7)    #c()是创建函数,赋值运算符是'<-',与函数assign()等价
    assign("x", c(10.4, 5.6, 3.1, 6.4, 21.7))  #也可以写成:c(10.4, 5.6, 3.1, 6.4, 21.7) -> x
    #如果一个表达式被当作一个完整的命令,它的值将被打印到终端但不被储存。
    #单独输入x则会将值打印出来。也可以打印倒数:
    x				#[1] 10.4  5.6  3.1  6.4 21.7
    1/x				#[1] 0.09615385 0.17857143 0.32258065 0.15625000 0.04608295
    y <- c(x, 0, x)   #也可以将向量作为元素
    y 				#[1] 10.4  5.6  3.1  6.4 21.7  0.0 10.4  5.6  3.1  6.4 21.7
    

    2.2 向量运算

        操作是按照向量中的元素一个一个进行的。同一个表达式中的向量并不需要具有相同的长度。如果它们的长度不同,表达式的结果是一个与表达式中最长向量有相同长度的向量。表达式中较短的向量会根据它的长度被重复使用若干次(不一定是整数次),直到与长度最长的向量相匹配。而常数很明显的将被不断重复。如,

    x<-c(1,2,3,4,5)
    y<-c(3,2,1)
    v<-x^2+y+1
    v
    #[1]  5  7 11 20 28
    

    常用运算有:

    1. +,-,*,/,^(次方);
    2. log, exp, sin, cos, tan,sqrt等;
    3. max和min的作用是选出所给向量中最大的或最小的元素;
    4. range函数的值是一个长度为2的向量,即c(min(x),max(x))
    5. length(x)返回了向量x中元素的个数,也就是x的长度。
    6. sum(x)给出了x中所有元素的总和;
    7. prod(x)给出x中所有元素的乘积;
    8. mean(x)和var(x),分别计算样本均值和样本方差,这两个函数分别相当于sum(x)/length(x),sum((x-mean(x))^2)/(length(x) -1)。如果var()的参数是一个np的矩阵,那么函数的值是一个pp的样本协方差矩阵,认为每行是一个包含p变量的样本向量。
    9. sort(x)返回一个与x具有相同长度的向量,其中的元素按招升序排列。还有其他更灵活的排序功能(参见order()和sort.list())。
    10. pmax和pmin将返回一个与最长的向量长度相等的向量,向量中的元素由参数中所有向量在相应位置的最大值(最小值)组成;
    11. 如果要使用复数,需要直接给出一个复数部分。因此sqrt(-16)将会返回NaN(无效数值)和一个警告,而sqrt(-16+0i)将按照复数进行运算。
    > x<-c(0,pi/6,pi/4,pi/3)
    > c(1,2,3,10)->z
    > c(2,9,11,22)->zz
    > c(5,6,7,10,3,1)->zzz
    > z^2+zzz-zz #结果值得思考
    [1]  4  1  5 88  2 -4  
    Warning messages:
    1: In z^2 + zzz : 长的对象长度不是短的对象长度的整倍数
    2: In z^2 + zzz - zz : 长的对象长度不是短的对象长度的整倍数
    > tan(x)
    [1] 0.0000000 0.5773503 1.0000000 1.7320508
    > max(x)
    [1] 1.047198
    > prod(z)
    [1] 60
    > mean(z)
    [1] 4
    > var(z)
    [1] 16.66667
    > sort(zzz)
    [1]  1  3  5  6  7 10
    > pmax(z,zz,zzz)
    [1]  5  9 11 22  3  9
    Warning message:
    In pmax(z, zz, zzz) : 参数值将数据略微回收
    > pmin(z,zz,zzz)
    [1]  1  2  3 10  1  1
    Warning message:
    In pmin(z, zz, zzz) : 参数值将数据略微回收
    > sqrt(-16+0i)
    [1] 0+4i
    

    2.3 生成序列

    最简单的方法是用冒号‘:’,冒号具有最高运算优先级。例如1:30就是向量c(1,2,. . .,29,30)。30:1构造一个递减序列。
    利用seq()函数构造序列:有五个参数,from, to, by, length, along,from, to可以不写参数名,seq(2,10)就相当于2:10。
    by指定步长,默认为1,如seq(-5, 5, by=.2)即为c(-5.0, -4.8, -4.6, …, 4.6, 4.8, 5.0)
    length指定序列长度,如seq(length=51, from=-5, by=.2),等同于seq(-5, 5, by=.2)
    along=vector只能单独使用,产生一个“1:length(vector)”序列。类似的函数是rep(),这个函数可以用多种复杂的方法来复制一个对象。最简单的形式是s5 <- rep(x, times=5)

    > 1:20
     [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20
    > seq(2,10,by=3)
    [1] 2 5 8
    > seq(length=3,from=-3,by=5)
    [1] -3  2  7
    > rep(3,times=3)
    [1] 3 3 3
    

    2.4 逻辑向量

    TRUE, FALSE, 和NA(not available), 前两个可以简写为T和F,但T/F并不是系统保留字,可以被用户覆盖,所以最好还是不要简写。
    逻辑向量是由条件给出的,如下列语句令temp成为一个与x长度相同,相应位置根据是否与条件相符而由TRUE或FALSE组成的向量:

    > 109<100
    [1] FALSE
    

    逻辑操作符包括<, <=, >, >=,完全相等==和不等于!=,与或非分别为&, |, !。
    在普通运算中,FALSE当做0而TRUE当做1。

    2.5 缺失值

    NA(not available): 一般来讲一个NA的任何操作都将返回NA。
    is.na(x)返回一个与x等长的逻辑向量,并且由相应位置的元素是否是NA来决定这个逻辑向量相应位置的元素是TRUE还是FALSE。
    x==NA是一个与x具有相同长度而其所有元素都是NA的向量。
    NaN(Not a Number): 由数值运算产生,如0/0, Inf-Inf.
    is.na(x)对于NA和NaN值都返回TRUE,
    is.nan(x)只对NaN值返回TRUE。

    2.6 字符向量

    字符串在输入时可以使用单引号(’)或双引号("); 在打印时用双引号(有时不用引号)。
    R使用与C语言风格基本相同的转义符, 所以输入\打印的也是\, 输入" 打印引号", \n: 换行, \t: tab, \b: 回格。
    字符向量可以通过函数c()连接;
    paste()可以接受任意个参数,并从它们中逐个取出字符并连成字符串,形成的字符串的个数与参数中最长字符串的长度相同。如果参数中包含数字的话,数字将被强制转化为字符串。在默认情况下,参数中的各字符串是被一个空格分隔的,不过通过参数sep=string 用户可以把它更改为其他字符串,包括空字符串。例如:
    labs <- paste(c(“X”,“Y”), 1:10, sep="") 使变量labs成为字符变量c(“X1”, “Y2”, “X3”, “Y4”, “X5”, “Y6”, “X7”, “Y8”, “X9”, “Y10”)

    > paste(c("X","Y",'Z'), 1:10, sep="_")
     [1] "X_1"  "Y_2"  "Z_3"  "X_4"  "Y_5"  "Z_6"  "X_7"  "Y_8"  "Z_9"  "X_10"
    

    2.7 index vector—数据集子集的选择与修改

    任何结果为一个向量的表达式都可以通过追加索引向量(index vector)来选择其中的子集。
    1 逻辑的向量。
    y <- x[!is.na(x)] 表示将向量x中的非NA元素赋给y;
    (x+1)[(!is.na(x)) & x>0] -> z 表示创建一个对象z,其中的元素由向量x+1中与x中的非缺失值和正数对应的向量组成。
    2. 正整数的向量
    x[6] 是x的第六个元素
    x[1:10] 选取了x的前10个元素(假设x的长度不小于10)。
    c(“x”,“y”)[rep(c(1,2,2,1), times=4)] 产生了一个字符向量,长度为16,由"x", “y”, “y”, "x"重复4次而组成。

    > c("x","y")[rep(c(1,2,2,1), times=4)]
     [1] "x" "y" "y" "x" "x" "y" "y" "x" "x" "y" "y" "x" "x" "y" "y" "x"
    
    1. 负整数的向量
      y <- x[-(1:5)] 表示向量y取向量x前5个元素以外的元素。
    2. 字符串的向量
      只存在于拥有names属性并由它来区分向量中元素的向量。这种情况下一个由名称组成的子向量起到了和正整数的索引向量相同的效果。
    > fruit <- c(5, 10, 1, 20)
    > fruit
    [1]  5 10  1 20
    > names(fruit) <- c("orange", "banana", "apple", "peach")
    > fruit
    orange banana  apple  peach 
         5     10      1     20 
    > lunch <- fruit[c("apple","orange")]
    > lunch
     apple orange 
         1      5 
    

    子集的修改
    x[is.na(x)] <- 0 表示将向量x中所以NA元素用0来代替
    y[y < 0] <- -y[y < 0] 表示将向量(-y)中 与向量y的负元素对应位置的元素 赋值给 向量y中 与向量y负元素对应的元素。作用相当于:
    y <- abs(y)

    三 对象,模式和属性

    3.1 固有属性:模式和长度

    对象是R所进行操作的实体,对象可以是向量、列表等,详见1.6.
    对象的模式包括numeri,ccomplex,character,logical,list,function,expression等。可以用mode(object)查看。
    对象的长度是对象的另一固有属性。可以用length(object)查看。
    attribute(object)可以查看更深入的属性。

    模式的转换
    在允许的情况下(大多数情况都是允许的),R可以完成各种模式的转换。例如:d<-as.character(z),将数值向量z<-(0:9)转化为字符向量c(“0”, “1”, “2”, …, “9”)。as.integer(d)将d转化为数值向量。
    R中很多形式为as.something()的函数,可以完成从一个模式向另一个模式的转化,或者是令对象取得它当前模式不具有的某些属性。

    3.2 改变对象的长度

    e <- numeric() 产生一个numeric型的空向量e。character()等类似。此时长度为对象0。
    此时新添加一个元素会使e的长度自动调整。
    e[3] <- 17 令e为一个长度为3的向量(此时,该向量的前两个元素都是NA)
    缩短(截断)一个对象的长度,只需要一个赋值命令。因此,若alpha是一个长度为10的对象,下面的命令
    alpha <- alpha[2 * 1:5]

    3.3 属性的获取和设置

    函数attributes(object)将给出当前对象所具有的所有非基本属性(长度和模式属于基本属性)的一个列表。
    函数attr(object,name)可以被用来选取一个指定的属性。除了为某些特殊的目的创建新属性这样特殊的环境下,这些函数很少被用到。
    当函数attr()用在赋值语句左侧时,既可以是将对象与一种新的属性关联,也可以是对原有属性的更改。例如

    attr(z,“dim”) <- c(10,10) 另R将z作为一个10X10的矩阵看待。

    3.4 对象的类别

    对象的一个特别属性,类别,被用来指定对象在R编程中的风格。比如:如果对象类别"data.frame"则会以特定方式处理。
    unclass()可以去除对象的类别。
    summary()可以查看对象的基本信息(min, max, mean, etc.)

    四 有序因子和无序因子

    因子是一种向量对象,它给自己的组件指定了一个离散的分类(分组),它的组件由其他等长的向量组成。R提供了有序因子和无序因子。
    通俗点说,因子就是将对象的值分成不同的组(levels)。
    用函数factor()创建一个因子,levels按序排列(字母序或数值序)。

    例如province<-c(“四川”,“湖南”,“江苏”,“四川”,“四川”,“四川”,“湖南”,“江苏”,“湖南”,“江苏”),为province创建因子:

    pf<-factor(province) 创建province的因子pf
    pf 打印出来
    [1] 四川 湖南 江苏 四川 四川 四川 湖南 江苏 湖南 江苏
    Levels: 湖南 江苏 四川
    函数levels()可以用来观察因子中有多少不同的levels。

    假如我们拥有这些省份考生的分数:

    score<-c(95,86,84,92,84,79,86,99,85,90)
    函数tappley()可以用来计算各省的平均分数,函数tapply()的作用是对它第一个参数的组件中所包含的每个组应用一个参数三指定的函数。
    smeans<-tapply(score,pf,mean)
    smeans
    湖南 江苏 四川
    85.66667 91.00000 87.50000
    再例如,下面命令会给出各组的length
    tapply(score,pf,length)
    湖南 江苏 四川
    3 3 4

    函数ordered()可以创建有序因子

    ordered(province)
    [1] 四川 湖南 江苏 四川 四川 四川 湖南 江苏 湖南 江苏
    Levels: 湖南 < 江苏 < 四川

    五 数组和矩阵

    5.1 数组

    数组可以看成一个由递增下标表示的数据项的集合,例如数值。
    数组的生成
    如果一个向量需要在R中以数组的方式被处理,则必须含有一个维数向量作为它的dim属性。
    维度向量由dim()指定,例如,z是一个由1500个元素组成的向量。下面的赋值语句

    dim(z) <- c(3,5,100) 使它具有dim属性,并且将被当作一个3X5X100的数组进行处理。 c(3,5,100) 就是他的维度向量。
    还可以用到像matrix()和array()这样的函数来赋值。比如
    array(1:20, dim=c(4,5))
    matrix(1:24, 3,4)
    数据向量中的值被赋给数组中的值时,将遵循与FORTRAN相同的原则"主列顺序",即第一个下标变化的最快,最后的下标变化最慢。
    数组的运算
    数组可以在算数表达式中使用,结果也是一个数组,这个数组由数据向量逐个元素的运算后组成,通常参与运算的对象应当具有相同的dim属性。

    5.2 数组的索引和数组的子块

    数组中的单个元素可以通过下标来指定,下标由逗号分隔,写在括号内。
    我们可以通过在下标的位置给出一个索引向量来指定一个数组的子块,不过如果在任何一个索引位置上给出空的索引向量,则相当于选取了这个下标的全部范围。
    如a[2,],a[,3,]等

    5.3 索引数组

    除了索引向量,还可以使用索引数组来指定数组的某些元素。
    例如:有4X5的数组a,若要得到a中的a[1,3], a[2,2] 和a[3,1]这三个元素,可以生成索引向量i,然后用a[i]得到它们。

    a <- array(1:20,dim=c(4,5)) # Generate a 4 by 5 array.
    i <- array(c(1:3,3:1),dim=c(3,2))
    i
    [,1] [,2]
    [1,] 1 3
    [2,] 2 2
    [3,] 3 1
    a[i]
    [1] 9 6 3
    a[i] <- 0 # 将这三个元素用0替换。

    5.4 向量,数组的混合运算

    表达式从左到右被扫描;
    参与运算的任意对象如果大小不足,都将被重复使用直到与其他参与运算的对象等长;
    当较短的向量和数组在运算中相遇时,所有的数组必须具有相同的dim属性,否则返回一个错误;
    如果有任意参与运算的向量比参与运算的矩阵或数组长,将会产生错误;
    如果数组结构正常声称,并且没有错误或者强制转换被应用于向量上,那么得到的结果与参与运算的数组具有相同的dim属性。

    5.5 矩阵的运算

    构建分区矩阵:cbind()和rbind(),cbind()按照水平方向,或者说按列的方式将矩阵连接到一起。rbind()按照垂直的方向,或者说按行的方式将矩阵连接到一起。

    外积:操作符是%o%:

    ab <- a %o% b 或者
    ab <- outer(a, b, “*”)
    其中的乘法操作可以由任意一个双变量的函数替代。

    广义转置:函数t(A),或aperm(A, c(2,1));

    获取行数/列数:nrow(A)和ncol(A)分别返回矩阵A的行数和列数。

    矩阵乘法:操作符为%*%;

    交叉乘积(cross product):crossprod(X,Y)等同于t(X) %*% y,crossprod(X)等价于crossprod(X, X);

    diag(v):如果v是向量,diag(v)返回一个由v的元素为对角元素的对角矩阵。
    如果v为矩阵,diag(v)返回一个由v主对角元素组成的向量。
    如果v只是一个数值,那么diag(v)是一个vXv的单位矩阵。

    特征值和特征向量:eigen(Sm)。这个函数的结果是由名为values和vectors的两部分组成的列表。如果只是需要特征值:eigen(Sm)$values

    最小二乘拟合即QR分解:lsfit(), qr()。

    强制转换为向量:as.vector(),或者直接c().

    解线性方程和求矩阵的逆,奇异值分解与行列式见<R语言笔记>;

    六 列表和数据帧

    6.1 列表

    列表是由称作组件的有序对象集合构成的对象。组件的模式或类型不一定相同。
    形如Lst <- list(name_1=object_1, . . ., name_m=object_m)的赋值将创建一个包含m个组件的列表,并根据参数中指定的名称为其命名。(其名称可以自由选取)。如果它们的名称被省略,组件将只是被编号。例如:

    Lst <- list(name=“Fred”, wife=“Mary”, no.children=3,child.ages=c(4,7,9))

    所使用的组件是被复制到新的列表中的,对原始对象没有影响。
    组件总是被编号的,并且可以通过编号指定。
    Lst[[1]] 即为"Fred",也可以用 LstnameLst[[&quot;name&quot;]]Lst[[4]]Lst[[4]][1]Lst[[1]]Lst[1][[...]]使[...]LstLstLstname,Lst[[&quot;name&quot;]]指定。如果Lst[[4]]是一个有下标的数组,Lst[[4]][1]就是它的第一项。 区分Lst[[1]]和Lst[1],&#x27;[[...]]&#x27;是选择单个元素时使用的操作符,而&#x27;[...]&#x27;是一个一般的下标操作符。因此,前者代表列表Lst中的第一个对象;后者是列表Lst的子列表,仅包含列表的第一项。 组件的名称可以缩写,可缩写的程度是只要能令组件被唯一的识别就可以了。如:Lstna等价于LstnameLstname, Lstw等价于Lst$wife。

    扩展列表
    可以通过指定额外组件的方式。例如

    Lst[5] <- list(matrix=Mat)

    连接列表
    当连接函数c()的参数为列表时,其结果也是一个模式为列表的对象。由参数中的列表作为组件依次连接而成。

    list.ABC <- c(list.A, list.B, list.C)

    6.2 数据帧

    数据帧是类别为"data.frame"的列表;
    数据帧会被当作各列具有不同模式和属性的矩阵。
    数据帧按照矩阵的方式显示,选取的行或列也按照矩阵的方式来索引。

    创建数据帧

    直接创建:那些满足对数据帧的列(组件)限制的对象可以通过函数data.frame来构建成为一个数据帧

    t <- data.frame(home=statef, loot=income, shot=incomef)
    强制转换:如果一个列表的组件与数据帧的限制一致,这个列表就可以通过函数as.data.frame()强制转化为一个数据帧。
    外部文件:创建数据帧最简单的方法应当是使用read.table()函数从外部文件中读取整个数据帧。

    数据帧和列表的限制

    1 组件必须是向量(数值型,字符形,逻辑型),因子,数值矩阵,列表,或其他数据帧;
    2 矩阵,列表,数据帧向新数据帧提供的变量数分别等于它们的列数,元素数和变量数;
    3 数值向量,逻辑值和因子在数据帧中保持不变,字符向量将被强制转化为因子,其水平是字符向量中所出现的值;
    4 数据帧中作为变量的向量结构必须具有相同的长度,而矩阵结构应当具有相同的行大小。

    挂接和卸载数据帧

    当觉得使用’(t&#x27;引用数据帧元素(如&#x27;thome’)麻烦时,可以进行数据帧挂接

    attach(t) 这样可以直接引用数据帧内的元素,而无需’(name)&#x27;,前提是数据帧外没有同名的变量(如name)。 挂接后若要对数据帧元素进行赋值操作,仍需用&#x27;’,否则视为赋值给数据帧外的元素。
    赋值后必须要先卸载(detach)再重新挂接后,新值才可见。
    detach(t)

    attach()是具有一般性的函数,即它不仅能够将目录和数据帧挂接在搜索路径上,还能挂接其他类别的对象。特别是模式为"list"的对象可以通过相同的方式挂接:

    attach(any.old.list)
    任何被挂接的对象都可以用detach来卸载,通过指定位置编号或者指定名称这样的方式.

    搜索路径
    函数search()将显示目前的搜索路径,可以用来查看数据帧/列表的挂接状态。
    ls()(或objects())命令可以用来检查搜索路径任意位置上的内容。如:ls(), ls(2), ls(t)
    R可以在搜索路径中包含至多20个项目,列表和数据帧只能在位置2或更靠后的位置上挂接。

    数据帧使用惯例

    1 将每个独立的,适当定义的问题所包含的所有变量收入同一个数据帧中,并赋予合适的、易理解、易辨识的名称;
    2 处理问题时,当相应的数据帧挂接于位置2,同时在第1层工作目录下存放操作的数值和临时变量;
    3 在结束一次工作之前,将你认为对将来有参考价值的变量通过$标记的形式添加到数据帧里面,然后detach();
    4 最后,将工作目录下所有不需要的变量剔除,并且尽量将剩下多余的临时变量都清除干净。
    这样我们可以很简单的在同一个目录下处理多个问题,而且对每个问题都可以使用x,y,z这样的变量名。

    七 从文件中读取数据

    7.1 函数read.table()

    该函数可以直接将文件中完整的数据帧读入。此时文件要符合特定的格式:
    1 第一行应当提供数据帧中每个变量的名称;
    2 每一行(除变量名称行)应包含一个行标号和各变量的值。
    3 若没有表头(变量名称行),也没有行标号,只有变量值,则默认变量名称为"v1",“v2”…
    4 若有表头,但没有行标号,则可以指定参数header=TRUE.

    7.2 函数scan()

    该函数从键盘或文件中读取数据,并存入向量或列表中。

    inp <- scan(file, what)
    第一个参数是文件名,如“test.txt”,若为“”或空,则从键盘读入数据;
    第二个参数用于确定读入数据的模式。 如:list("",0,0) 指定读入到列表中,列表有三项,且列表第一项是字符型,第二三项是数值型。若为0,则指定读入到一个数值向量中,若为“”则指定读入到字符向量中。

    7.3 内置数据集的读取

    R本身提供超过50个数据集,同时在功能包(包括标准功能包)中附带更多的数据集。与S-Plus不同,这些数据即必须通过data函数载入。

    data() #获得基本系统提供的数据集列表,然后通过形如
    data(infert) #来载入名为infert的数据集

    从其他package中载入数据集
    data(package=“nls”) #查看nls中数据集
    data(Puromycin, package=“nls”) #读取nls中Puromycin数据集。
    用library()挂接package后,它的数据集也自动包含到搜索路径中了。
    library(nls) #载入package nls
    data() #查看数据集
    date(Puromycin) #载入Puromycin数据集
    7.4 编辑数据

    在使用一个数据帧或矩阵时,edit提供一个独立的工作表式编辑环境。

    xnew <- edit(xold) #对数据集xold进行编辑。并在完成时将改动后的对象赋值给xnew
    xnew <- edit(data.frame()) #可以通过工作表界面录入新数据。

    fix()函数用于直接修改已有的对象,等价于 x<-edit(x).

    八 概率分布

    8.1 R是一个统计表集合(略读)

    R提供了一套完整的统计表集合。函数可以对累积分布函数P(X<=x),概率密度函数,分位函数(对给定的q,求满足P(X<=x) > q的最小x)求值,并根据分布进行模拟。

    对于所给的名称,加前缀’d’代表密度(density),'p’代表CDF,'q’代表分位函数,'r’代表模拟(随即散布)。这几类函数的第一个参数是有规律的,形为dxxx的函数为x,pxxx的函数为q,qxxx的函数为p,rxxx的函数为n(rhyper和rwilcox是特例,他们的第一个参数为nn)。目前为止,非中心参数(non-centrality parameter)仅对CDF和少数几个其他函数有效,细节请参考在线帮助。
    所有pxxx和qxxx的函数都具有逻辑参数lower.tail和log.p,而所有的dxxx函数都有参数log,这个是我们可以直接通过

    • pxxx(t, …, lower.tail = FALSE, log.p = TRUE)
      获取,比如说,累积失效函数(cumulative/integrated hazard function),H(t) =-log(1-F(t)),以及更精确的对数似然(通过dxxx(…, log = TRUE))。
      此外,对于来自正态分布,具有学生化样本区间的分布还有ptukey和qtukey这样的函数。下面是一些例子

    2-tailed p-value for t distribution

    2*pt(-2.43, df = 13)

    upper 1% point for an F(2, 7) distribution

    qf(0.99, 2, 7)

    8.2 检测数据集的分布

    函数summary和fivenum这两个函数可以给出摘要,后者只给出数值;
    函数stem可以将数值统计结果以类似直方图的方式显示出来;
    函数hist()可以绘制直方图;
    函数density和line可以获得更漂亮的密度图;
    功能包fun中的ecdf函数能绘制经验累积分布函数;
    还可以进行拟合正态分布,覆盖拟合CDF;
    还可以绘制Quantile-quantile (Q-Q)图有助于我们更细致的检测其分布形态;

    8.3 单样本和两样本检验(略读)

    九 语句组、循环和条件操作

    R是一种表达式语言,也就是说其命令类型只有函数或表达式,并由它们返回一个结果。
    语句组由花括号‘{ }’确定,此时结果是该组中最后一个能返回值的语句的结果。

    条件语句

    if (expr_1) expr_2 else expr_3
    其中条件表达式expr1必须返回一个逻辑值,操作符&&和||经常被用于条件部分。
    &和|与&&,||的区别在于,&和|按照逐个元素的方式进行计算,&&和||对向量的第一个元素进行运算,只有在必需的时候才对第二个参数求值。
    if/else结构的向量版本是函数ifelse,其形式为ifelse (condition,a,b),产生函数结果的规则是:如果condition[i]为真,对应a[i]元素;反之对应的是b[i]元素。根据这个原则函数返回一个由a,b中相应元素组成的向量,向量长度与其最长的参数等长。

    循环语句

    for (name in expr_1) expr_2
    其中name是循环变量,expr1是一个向量表达式(通常是1:20这样的序列),而expr2经常是一个表达式语句组,expr2随着name依次取expr1结果向量的值而被多次重复运行。

    repeat(expr)

    while(condition) expr

    break语句可以用来中断任何循环,可能是非正常的中断。而且这是中止repeat循环的唯一方式。

    next语句可以中止一个特定的循环,跳至下一个.

    十 编写自己的函数

    10.1 函数的定义

    name <- function(arg_1, arg_2, …) expression
    expression是一个R表达式(通常是表达式语句组),并使用参数arg_i来计算出一个数值,表达式的值就是函数的返回值。
    函数调用的形式通常都是name(expr1,expr2,…)

    10.2 定义新的二元操作符

    可以将函数定义为新的二元操作符:

    “%!%” <- function(X, y) { … }
    正如矩阵乘法运算符,%*%,和矩阵外积运算符%o%

    10.3 指定参数和默认值

    如果被调用函数的参数按照"name = obj"的形式给出,那么参数的次序可以是任意的。
    而且,参数序列可以在开始依次序给出,而将指定名称的参数置于后面。
    因此,如果由一个函数fun1被定义为

    fun1 <- function(data, data.frame, graph, limit) {
    [function body omitted]
    }
    那么函数可以有多种等价的使用方法,例如
    ans <- fun1(d, df, TRUE, 20)
    ans <- fun1(d, df, graph=TRUE, limit=20)
    ans <- fun1(data=d, limit=20, graph=TRUE, data.frame=df)
    默认值 :在很多情况下,参数都会被赋予一个普遍适用的默认值。
    fun1 <- function(data, data.frame, graph=TRUE, limit=20) { … }
    则函数可以这样被调用
    ans <- fun1(d, df)
    此时与上面三种情况等价,也可以这样调用
    ans <- fun1(d, df, limit=10)
    此时改变了一个默认值。
    NOTE:参数可以是任意表达式,甚至可以是包含其他参数的表达式;

    10.4 额外参数“…”

    当需要将一个函数的参数传递给另一个函数时,可以通过包含一个额外的参数"…“实现。
    fun1 <- function(data, data.frame, graph=TRUE, limit=20, …) {
    [omitted statements]
    if (graph)
    par(pch=”*", …)
    [more omissions]
    }

    10.5 全局变量和局部变量

    函数内的赋值都是局部变量,退出函数就丢失了。
    如果要在函数内进行永久赋值(定义全局变量),需要用到“超赋值”操作符, <<-或者函数assign()。

    10.6 一些高级示例

    区组设计的效率因子 (E±ciency factors)
    删除打印数组中的所有名称
    递归的数值积分

    10.7 范畴(Scope)

    函数主体内出现的标识(symbol)可以被分为3类;正式参数、局部变量和自由变量。
    正式参数就是出现在函数参数列表中的参数,他们的值由实际的函数参数与正式参数的绑定(binding)过程决定。
    局部变量是在参数主体中,由表达式求值过程决定的变量。
    自由变量为既不是正式参数又不是局部变量的变量。赋值之后自由变量成为局部变量。

    在R中,自由变量的值由函数被创建的环境中与其同名的第一个变量值决定(我理解为最近的同名变量),这种方式被称为词汇式范畴(lexical scope)。
    而在S中,该值由同名的全局变量决定。
    例如下面的函数cube,在R中cube(2)=8,在S中报错为sq()找不到n。
    cube <- function(n) {
    sq <- function() nn
    n
    sq()
    }

    一个银行账户的例子,详见《R语言笔记》。

    10.8 定制环境

    详见《R语言笔记》。

    10.9 类别,通用函数和对象定位

    一个对象的类别(class)决定了他会如何被通用函数(generic function)处理。
    如果参数本身没有任何类别属性,或者其类别在特定问题中并不满足通用函数的要求,通常会有一个默认的动作被执行。
    类别机制使用户可以为特定的目的设计和编写通用函数。
    使用> methods(class=“data.frame”)可以查看数据帧的通用函数。
    使用> methods(plot)可以查看plot函数能处理的类别。

    十一 R的统计模型

    待阅。

    十二 图形过程

    在Windows下用window()命令可以打开图形窗口。

    12.1 高级绘图命令

    高级绘图函数,由函数参数提供数据生成一幅完整的图形。其中适当的坐标轴,标签和标题都自动生成了(除非你另外指定了)。高级绘图命令每次都生成一幅新的图形,清除当前的图形(如果需要的话)。
    

    1 plot()函数

    这是一个通用函数:生成图形的类型取决于第一个参数的类型或类别(class)。
    plot(x,y) plot(xy):
    如果x,y是向量,plot(x,y)生成一幅y对x的散点图。用包含两个元素x,y的一个列表或一个两列的矩阵作为一个参数(第二种形式那样的)也能达成相同的效果。
    plot(x):
    如果x是一个时间序列,这个命令生成一个时间序列图,如果x是一个数值型向量,则生成一个向量值对它们向量索引的土,而如果x是一个复向量,则生成一个向量中元素的虚部对实部的图。
    plot(f) plot(f,y):
    f是一个因子对象,y是一个数值型向量。第一种形式生成一个f的条形图;第二种形式生成y对应于f各个水平的箱线图。
    plot(df) plot( expr) plot(y expr):
    df是一个数据帧,y是任意对象,expr是由对象名称组成的列表,分隔符’+’(例如,a + b + c)。前两种形式生成分布式的图形,第一种是数据帧中的变量,第二种是一系列被命名的对象。第三种形式生成y对expr中每个对象的图。

    2 显示多元数据

    如果X是一个数值矩阵或数据帧,下面的命令

    pairs(X)
    生成一个配对的散点图矩阵,矩阵由X中的每列的列变量对其他各列列变量的散点图组成,得到的矩阵中每个散点图行、列长度都是固定的。

    当问题涉及到三、四个变量时,使用coplot更好些。如果a和b是数值向量,c是数值向量或因子对象(全都是相同长度的),下面的命令

    coplot(a ~ b | c)
    对应c的某些给定值生成数个a对b的散点图。当c是一个因子时,这个命令也就是对c的每个水平生成a对b的散点图。当c是数值向量的时候,这个数值向量被分为一系列的条件区间(conditioning intervals),对应c的每个区间生成一个a对b的散点图。区间的数量和位置可以通过coplot()的参数given.values来控制,函数co.intervals()也可以用来选择区间。我们也可以使用两个给定变量通过命令
    coplot(a ~ b | c+d)
    对c和d的每个联合条件区间生成a对b的散点图。

    函数coplot()和pairs()都可以使用参数panel=,这个参数可以用来定制我们得到的图形类型。默认的是points()函数,生成一个散点图,不过通过在参数panel=中提供某些其它的低级图形函数,我们可以生成需要的各种图形。一个很有用的函数例子是panel.smooth()。

    3 显示图形

    qqnorm(x) qqline(x) qqplot(x,y)
    分布比较图。第一种形式生成向量x对期望正态分数(一个正态记分图),第二个在上面的图上添加一条穿过分布分位点和数据分位点的直线。第三个命令生成x的分位点对y分位点图,用于分别比较它们的分布。

    hist(x) hist(x,nclass=n) hist(x,breaks=b, . . . )
    生成数值变量x的直方图。通常会自动选定一个合理的类别数,不过可以通过nclass=参数来指定一个推荐值。或者通过参数breaks=来指定分界点。如果给定了probability=TRUE参数,那么条形图代表相对频数而不是累计数。

    dotchart(x, . . . )
    创建一个x中数据的点图(dotchart)。点图中y轴给出x中数据的标签,x轴给出它们的值。它允许对落入某一特定区间的所有数据项方便的进行可视化选择。

    image(x,y,z, . . . ) contour(x,y,z, . . . ) persp(x,y,z, . . . )
    生成三个变量的图。函数image是用不同的颜色绘制一些矩形方格来展示z的值,函数contour通过绘制等高线来展示z的值,函数persp绘制一个3D面。

    4 参数配置

    add=TRUE 强制函数按照低级图形函数的方式操作,将图形置于当前图形上(仅对某些函数有效)。
    axes=FALSE 暂时禁止坐标轴的生成|以便使用axis()函数添加你自己定制的坐标轴。默认情况是axes=TRUE,即包含坐标轴。
    log=“x” log=“y” log=“xy” 令x,y或者两者全都对数化。这个参数对许多函数都有效,不过不是全部。
    type= 参数type=控制所生成图形的类型:
    type=“p” 绘制单独的点(默认值)
    type=“l” 绘制线
    type=“b” 绘制由线连接的点(both)
    type=“o” 将点绘在线上
    type=“h” 绘制从点到零轴的垂线(high-density)
    type=“s” 阶梯式图。第一种形式中,点由垂线的顶部定义;第二种形式里用底部定义。
    type=“n” 不绘制。不过坐标轴是绘出的(默认情况)而且要根据数据绘出坐标系统。用来给后续的低级图形函数创建图形作基础。
    xlab=string ylab=string x轴或y轴的标签。使用这些参数来改变默认的标签,通常的默认值是调用高级绘图函数时所使用对象的名称。
    main=string 图表标题,位于图形的顶部,大字体显示。
    sub=string 子标题,位于x轴下面,用较小的字体显示。

    12.2 低级绘图命令

    有些时候高级绘图函数并不能很精确的生成我们想要的图形。这种情况下,我们可以通过低级绘图命令在当前图形上添加信息(例如,点、线或文本)。

    points(x,y) lines(x,y)
    在当前图形上添加点或线。函数plot()的参数type=也可以用于这些函数(默认的是"p"代表points()和"l"代表lines())。

    text(x,y,labels, . . . )
    给定点坐标x,y,在该点添加文本。通常labels是一个整数或字符向量,其中labels[i]出现在点(x[i],y[i])。默认值是1:length(x)。
    Note: 这个函数通常用于这样的序列中

    plot(x, y, type=“n”); text(x, y, names)
    图形参数type="n"阻止了点的生成,但是建立了坐标轴,由函数text()提供字符向量names所指定的特定字符。

    abline(a, b) abline(h=y) abline(v=x) abline(lm.obj)
    在当前图上添加一条斜率为b,截距为a的直线。h=y在图形指定的高度上绘制一条贯穿图形的水平线,同样的,v=x在x轴的指定位置绘制一条贯穿的垂线。而lm.obj是一个包含coefficients组件的列表,该组件的长度为2,分别当作截距和斜率。

    polygon(x, y, . . . )
    绘制一个多边形,其顶点由(x,y)指定。同时还(可选的)可以加上阴影线,如果图形设备允许的话还可以将多边形填充。

    legend(x, y, legend, . . . )
    这当前图形的指定位置添加图例。绘制的字符,线条类型,颜色等等由字符向量legend指定。除此之外至少还要给出一个参数v,与绘图单元的相应值,分别有:
    legend( , fill=v)填充方框的颜色
    legend( , col=v)绘制点线的颜色
    legend( , lty=v)线条类型
    legend( , lwd=v)线条宽度
    legend( , pch=v)绘制字符(字符向量)

    title(main,sub)
    在当前图形的顶部用大字题添加一个标题main,在底部用较小的字体添加子标题sub。

    axis(side, . . . )
    在当前图形的指定边上添加坐标,在哪个边上由第一个参数指定(1到4,从底部按照顺时针顺序)。其他参数控制坐标的位置|在图形内或图形外,以及标记的位置和标签。适合在调用参数为axes=FALSE的函数plot()后添加定制的坐标轴。

    低级绘图函数通常都需要一些位置信息(例如,x,y坐标)来决定在哪里添加新的元素。坐标以用户坐标(user coordinates)的形式给出,这个坐标系是根据所提供的数据由之前的高级绘图语句定义的。需要x,y参数的地方还可以选用一个单独的参数,即一个由名为x,y的元素组成的列表。相似的,一个两列的矩阵也可以。像locator()(后面会提到)这样的函数也可以按照这种方式交互的指定图形中的位置。

    添加数学注释
    某些情况下需要在图形中加入数学符号或公式。在R中可以通过在text, mtext,axis或title中指定一个表达式来实现。例如,下面的代码绘制了二项概率函数的公式:

    text(x, y, expression(paste(bgroup("(", atop(n, x), “)”),p^x, q^{n-x})))
    更多的信息,包括其特性的一个完整列表可以在R中通过下面的命令得到:
    help(plotmath)
    example(plotmath)

    添加Hershey矢量字体

    help(Hershey)
    example(Hershey)

    12.3 图形的交互

    R提供了函数,使用户可以通过鼠标从图形中释放信息或添加信息。

    locator(n,type)
    等待用户使用鼠标左键在当前图形上选择位置。直到n(默认是512)个点都选完或者点击了鼠标另一个键(Unix,Windows),在Mac下用鼠标点击图形窗口外的部分也可以结束。参数type的效果和在高级绘图函数中使用时是一样的,即在选择的点绘制指定的图形。默认情况是不绘制图形。函数locator()将所选点的坐标返回到一个列表中,列表包含x,y两个组件。
    通常locator()在调用的时候并不带参数。这个功能在为图例或标签这样的图形元素选择位置时比较有用,尤其是这些位置不好通过计算得到的时候。举个例子,如果要在一个野点附近添加一些信息,可以使用下面的命令

    text(locator(1), “Outlier”, adj=0)

    identify(x, y, labels)
    允许用户在x,y(使用鼠标左键)定义的点附近绘制相应的labels的组件(如果没有给出labels就给出该点的序号),突显该点。当鼠标的另一个键被点击时(Unix,Windows)返回被选点的序号,在Mac下通过点击图形窗口外来实现这个效果。
    有时我们更想确定图形中的点,而非它们的位置。例如,我们可能希望从图示中选出某些感兴趣的观测点,然后进行某些操作。通过两个数值向量x,y给定一系列坐标(x; y),我们可以使用identify()函数:

    plot(x,y) > identify(x,y)
    函数identify()本身不绘图,但是允许用户移动鼠标,在某点附近点击左键。离鼠标指针最近的点将被突显,并标出其序号(也就是它在向量x/y中的位置)。或者使用identify()的labels参数,把某些信息(例如案例名称)作为突显的标志;或者通过plot=FALSE参数取消所有突显标志。当选点的过程结束后,identify()返回所选点的序号;用户可以使用这些序号从x和y中释放所选的点。

    12.4 使用图形参数

    通过图形参数可以定制图形显示的几乎所有方面。R包含大量的图形参数,可以控制的包括线条类型,颜色,图标排列,文本对齐等等。

    1 持续性变更 (Permanent changes): par()函数

    通过par()函数设定图形参数的值会持续性的更改参数的值,也就是说这之后(在当前设备上)所有对图形函数的调用都受到新值的影响。
    函数par()用于存取和修改当前图形设备的图形参数列表。
    par()不带任何参数,返回当前设备所有图形参数和它们的值的列表。
    par(c(“col”,“lty”))
    参数为一个字符向量,仅返回参数中指定的图形参数(也是作为一个列表)。
    par(col=4, lty=2)
    带指定参数(或一个列表型参数),设定指定图形参数的值,并将参数的原始值作为一个列表返回。
    所以如果想设定参数绘制一些图形后再恢复成原来的设定,可以这么做:

    oldpar <- par(col=4, lty=2)
    . . . plotting commands . . .
    par(oldpar)

    2 临时性变更:图形函数的参数

    图形参数也可以作为(几乎)所有图形函数的命名参数。这种方式的效果和用于par()函数的效果是一样的,只不过这种改变只在函数调用的区间内有效。比如:

    plot(x, y, pch="+")
    生成一个以加号作为绘图符号的散点图,而不改变后续图形的默认的绘图符号。

    3 图形参数列表

    A 图形元素
    R图表由点、线、文本和多边形(填充区)组成。下面的图形参数控制了图形元素的绘制:
    pch="+" 用来绘点的字符。这个默认值随不同的图形驱动是不同的,不过通常都是’±’。除非使用"."作为绘图字符,否则绘制的点都会比适当的位置高一点或者低一点,而不是恰好在指定位置。
    pch=4当给定一个0到18的整数时,会生成一个特殊的绘图符号。通过下面的命令可以看这些符号都有什么。

    legend(locator(1), as.character(0:18), pch=0:18)
    lty=2 线条类型。并不是所有图形设备都支持多种线条类型(在那些支持的设
    备上也不全一样),不过线条类型1始终是实线,2及以上的是点、划线或者它们的组合。
    lwd=2 线条宽度。所需的线条宽度,是"标准"线条宽度的倍数。对line()等函数绘制的线条和坐标轴都有效果。
    col=2 点、线、文本、填充区和图像使用的颜色。每种图形元素都有其可用的颜色列表,这个参数的值就是颜色在列表中的序号。显然,这个参数值对有限的一类设备有效。
    font=2 指定文本所使用字体的一个整数。如果可能的话,设备驱动会把1对应普通文本,2对应粗体,3对应斜体,4对应粗斜体。
    font.axis font.lab font.main font.sub 这几个参数分别指定坐标轴注释,x,y轴的标签,主、副标题所用的字体。
    adj=-0.1 文本对齐和绘图位置有关。0代表左对齐,1代表右对齐,0.5代表水平的中间位置。当前的值使会图位置到左端距离的比例,所以-0.1在文本和绘图位置之间留10%的空白。
    cex=1.5 字符缩放。这个值是所需文本字符(包括绘图字符)的大小,与默认文本大小相关。

    B 坐标轴和标记
    很多R的高级图形都有坐标轴,你可以使用低级图形函数axis()自己创建坐标轴。坐标轴包含三个主要组件:轴线axis line(线条类型由参数lty控制),标记tick mark(沿着轴线划分单元),标号tick label(用来标出这些单元)。这些组件可以用下面这些参数定制。
    lab=c(5,7,12)前两个数字分别是x和y轴上所要划分的区间数。第三个数字是坐标轴标签的长度,用字符数来衡量(包括小数点)。参数的值如果选得太小可能导致所有标号都聚在一起。
    las=1 坐标轴标签的方向。0代表总是和坐标轴平行,1代表总是水平的,2代表总是垂直于坐标轴。
    mgp=c(3,1,0)坐标轴组件的位置。第一个组件是坐标轴标签到坐标轴的距离,单位是文本行(text lines)。第二个组件是到标号的距离,最后一个是轴的巍直到轴线的距离(一般都是0)。正数代表绘图区域外,负数代表区域内。
    tck=0.01 标号的长度,绘图区域大小的一个分数作单位。当tck比较小时(小于0.5),就强制x和y轴上的标记为相同大小。tck=1就是生成网格线。取负值时标记画向绘图区域外。内部标记可以使用tck=0.01和mgp=c(1,-1.5,0)。
    xaxs=“s” yaxs=“d” 分别是x、y轴的类型。如果是s(standard)或e(extended)类型,那最大和最小的标记都始终在数据区域之外。如果有某个点离边界非常近,那么扩展型(extended)的轴会稍稍扩展一下。这种类型的轴有时会在边界附近留出大片空白。而i(internal)或r(默认值)类型的轴,标记始终在数据区域内,不过r类型会在边界留出少量空白。
    如果这个参数设为d,就锁定当前轴,对之后绘制的所有图形都用这个轴(直到参数被重新设定为其他的那几个值)。这个参数适用于生成一系列固定尺度的图。

    C 图边缘(Figure margins)
    在R中一个单独图形,图(figure),包含一个绘图区(plot region),以及环绕着这个区域的边缘(其中可能含有坐标轴标签、标题等等),(通常)这两部分以轴为边界。
    一个典型的图是

    控制图的样式的图形参数包括:
    mai=c(1,0.5,0.5,0)分别是底部,左侧,顶部,右侧的宽度,单位是英寸。
    mar=c(4,2,2,1)与mai相似,只是单位是文本行(text lines)。
    由于更改一个就会改变另一个的值,所以在这个意义上,mai和mar是等价的。这个参数的默认值通常都太大了;右侧边缘很少用到,如果没标题,顶部边缘也不需要,左侧和底部的边缘应当足够大,以容纳坐标轴和标号。此外,默认值并没有考虑到设备表面的大小:比如,使用postscript()驱动,height=4参数时,除非用mar,mai另外设定,否则图的边缘就要占上大约50%。使用多图环境时(后面会提到)。边缘会减少一半,不过这在多图共用一页的时候可能还不够。

    D 多图环境
    R允许在一页上创建一个n£m的图的阵列。每个图由自己的边缘,图的阵列还有一个可选的外部边缘,如下图所示。

    与多图环境相关的图形参数有:
    mfcol=c(3, 2) mfrow=c(2, 4)
    设定多图阵列的大小。第一个值是行数,第二个值是列数。这两个参数唯一的区别是mfcol把图按列排入,mfrow把图按行排入。上图所示的版式可用mfrow=c(3,2)创建;上图显示的是绘制四幅图后的情况。
    mfg=c(2, 2, 3, 2)
    当前图在多图环境下的位置。前两个数字是当前图的行、列数;后两个是其在多图阵列中的行列数。这个参数用来在多图阵列中跳转。你甚至可以在后两个数中使用和真值(true value)不同的值,在同一页上得到大小不同的图。
    fig=c(4, 9, 1, 4)/10
    当前图在页面的位置,取值分别是左下角到左边界,右边界,下、上边界的距离与对应边的百分比数。给出的例子是一个页面右下角的图。这个参数可以设定图在页面的绝对位置。
    oma=c(2, 0, 3, 0) omi=(0, 0, 0.8, 0)
    外部边缘的大小。与mar和mai相似,第一个用文本行作单位,第二个以英寸作单位,从下方开始按照顺时针顺序指定。
    外部边缘对页标题这类东西很有用。文本可以通过带outer=TRUE参数的mtext()函数加入外部边缘。默认情况下是没有外部边缘的因此必须通过oma或omi指定。
    函数split.screen()和layout()可以对多个图形作更复杂的排列。

    12.6 设备驱动

    R几乎可以在任何一种类型的显示器和打印设备上生成(不同质量的)图形。不过,在这之前,需要告诉R要处理的是哪一种设备。这通过启动一个设备驱动来完成。
    设备驱动通过调用设备驱动函数来启动。
    某些常用的设备驱动有:
    X11()[Unix] 使用X11视窗系统
    windows()[Windows] 使用 Windows 视窗系统
    postscript()在PostScript打印机上打印或者创建PostScript图形文件
    pictex()生成一个LATEX文件
    当一个设备使用完之后,可以通过下面的命令终止设备驱动

    dev.off()
    这个命令可以确保设备已经结束;例如,在某些硬拷贝的设备中,这个命令可以保证每页都已经完成,并且都被传送到打印机了。

    PostScript文档
    通过给postscript()函数带上file参数,我们可以把图形以PostScript格式存储到文件中。如果没有给出horizontal=FALSE参数,图形是横向的,你可以通过width和height参数控制图形的大小(图形会自动适应)。例如,命令

    postscript(“file.ps”, horizontal=FALSE, height=5, pointsize=10)
    为一个五英寸的图生成一个包含PostScript代码的文件,可以放在文当中。如果命令中的指定的文件名已经存在,将会被覆盖。

    多重图形设备
    每个对设备驱动的新调用都会打开一个新的图形设备,在设备列表中加入新的一项。这个设备就成为当前设备,图形输出就传送到这个设备。
    dev.list() 返回所有活动中设备的序号和名称。在列表位置1的设备始终是空设备(null device),这个设备不接收任何图形命令。
    dev.next() dev.prev() 分别返回当前设备的后一个和前一个设备的序号和名称。
    dev.set(which=k) 用来把当前设备更改为设备列表中位置k的那个。返回设备的序号和标签。
    dev.off(k) 终止图形列表位置k的那个图形设备。对于某些设备,比如postscript,这个命令会立刻打印文件或者正常结束文件,具体怎样处理取决于设备是怎样初始化的。
    dev.copy(device,. . . ,which=k) dev.print(device,. . . ,which=k)
    建立一个设备k的拷贝。其中device是一个设备函数,例如postscript,如果需要的话可以在’. . . '中指定其它的参数,dev.print效果相似,不过复制的设备会立刻关闭,所以打印硬拷贝这样的终止操作也会被立即执行。
    graphics.off() 终止列表中的所有图形设备,空设备除外。


    作者:jack237
    来源:CSDN
    原文:https://blog.csdn.net/jack237/article/details/8210598
    版权声明:本文为博主原创文章,转载请附上博文链接!

    展开全文
  • R语言 算术和逻辑运算符及数值

    万次阅读 2018-07-18 23:39:35
    R语言基本运算符 &nbsp; 运算符 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 描述 &nbsp; x&nbsp;+&nbsp;y &nbsp; &nbsp;加法 &nbsp; x&nbsp;-&...
  • R语言入门-安装R和Rstuido软件

    万次阅读 多人点赞 2018-09-15 20:31:01
    Rstudio是编辑、运行R语言的最为理想的工具之一。 1、官网下载R安装包  下载地址为:https://cran.r-project.org 进入链接,如下图所示,在页面顶部提供了三个下载链接,分别对应三种操作系统:Windows、Mac和...
  • R语言-下载安装和基础使用

    万次阅读 2017-06-14 15:59:02
    1.R的介绍 2.R的下载及安装 3.R的基础使用
  • R语言主页:https://www.r-project.org/ R语言开发环境下载安装地址:https://cran.r-project.org/mirrors.html 这是一个下载镜像站点的列表页面,之前贴了其中一个的链接,结果过了一段时间之后不能访问了; ...
  • R语言入门1---R语言介绍以及学前注意事项

    万次阅读 多人点赞 2018-03-28 16:16:07
    R语言是从贝尔实验室的S语言演变而来的,基于S语言开发的商业软件Splus,可以方便的编写函数、建立模型,具有良好的扩展性,取得了巨大成功。1995年由新西兰Auckland大学统计系的Robert Gentleman,Ross Ihaka,Bill...
  • R 语言连接错误信息unable to initialize the JIT

    万次阅读 热门讨论 2018-09-22 16:47:47
    使用 Java 调用 R 连接 Sqlserver 报了一个奇怪的错误,花了好久才解决,记录一下 long vectors not supported yet: qap_encode.c:36 Fatal error: unable to initialize the JIT 在 R 命令行中调用 RODBC 是可以...
  • Mac版R语言入门(一)R语言入门操作

    万次阅读 多人点赞 2016-11-20 20:37:20
    R语言问题讨论交流,欢迎关注我的新浪微博:Jenny爱学习 微信公众号:R语言数据分析与实践 2019R语言视频教程,已在微信公众号上同步更新: 第一集:数据科学与R 第二集:安装R 第三集:安装RStudio 第四集:...
  • R语言软件和RStudio环境的下载与安装

    千次阅读 2020-01-19 14:01:24
    R语言软件和RStudio环境的下载与安装 R语言软件与RStudio都是自由、开源、免费的,大家放心都可以到官网上去下载正版。 R语言软件是学习R 语言,进行R语言编程的必要软件,所以必须下载,而RStudio软件是R语言的编程...
  • R语言作图——density plot(密度图)

    万次阅读 2018-10-09 13:22:57
    首先还是要把你想要绘图的数据调整成R语言可以识别的格式excel中保存成csv格式。 数据的格式如下图:一列表示一种变量,第一行是列名 Step2. 绘图数据的读取 data&amp;lt;-read.csv(“your...
  • R语言环境下载及RStudio安装教程

    千次阅读 2020-04-10 21:45:32
    R语言环境配置: 进入官网后: 选择中国科技大学镜像 安装适合自己系统的R环境 如果是初学的话基础版也可以的: 至此,等待下载就OK了???? 下载完之后,就可以试试自己的第一句R语言了 R...
  • R语言环境安装 R语言官网 :https://www.r-project.org/ R语言下载地址 :https://cran.r-project.org/ 下载步骤: 打开https://cran.r-project.org/ Rstudio安装 ...
  • R语言多元Logistic逻辑回归 应用案例

    万次阅读 2019-06-14 15:00:55
    R语言多元Logistic回归 应用案例 多元Logistic回归 如何进行多重逻辑回归 可以使用阶梯函数通过逐步过程确定多重逻辑回归。此函数选择模型以最小化AIC,而不是像手册中的SAS示例那样根据p值。另请注意,在此...
  • R语言实现图像查重

    万次阅读 2018-10-25 15:37:19
    使用R语言编写三个脚本实现图像查重(需要提前导入R的jpeg库) R脚本路径: D:\Computer Science\Programming\R\ImageProcessing 图像存储路径(图像名称任意): D:\Computer Science\Programming\R\Image...
  • R语言相关性分析

    千次阅读 2019-11-12 22:52:00
    文章目录@[toc]Pearson相关系数(积差相关系数)适用条件Spearman等级相关系数适用条件Kendall's Tau相关系数适用条件偏相关适用条件R语言实现Pearson、Spearman、Kendall示例偏相关相关性显著性检验相关性可视化在...
1 2 3 4 5 ... 20
收藏数 655,997
精华内容 262,398
关键字:

r语言