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-03 10:19:28
    本课程旨在帮助学习者快速入门R语言: 课程系统详细地介绍了使用R语言进行数据处理的基本思路和方法。 课程能够帮助初学者快速入门数据处理。 课程通过大量的案例详细地介绍了如何使用R...
  • R语言数据分析入门

    千人学习 2019-06-26 11:50:34
    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-20 00:17:41
    作者:周运来,男,长大了才会遇到的帅哥,稳健,潇洒,大方,靠谱。大型测序工厂的螺丝钉,一个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/

    展开全文
  • R语言与数据分析【第一季】

    万人学习 2018-10-22 21:38:02
    当今计算机系统要处理的数据类型变得多种多样,并且为了深入理解,需要对...随着时代的发展,R语言也在不断的衍变,并成为了当前很多大数据应用当中的一个环节。 大数据时代,R 语言已蓄势待发,各位学员,let's go!
  • R语言基础介绍

    千次阅读 2018-12-20 11:01:24
    R语言 https://www.r-project.org/ RStudio https://www.rstudio.com/ 可视化数据挖掘工具Rattle #Rattle的安装 install.packages(&amp;quot;RGtk2&amp;quot;) install.packages(&amp;quot;rattle&...

    软件安装

    R语言

    https://www.r-project.org/

    RStudio

    https://www.rstudio.com/

    可视化数据挖掘工具Rattle

    #Rattle的安装
    install.packages("RGtk2")
    install.packages("rattle")
    
    library(rattle)#载入rattle包
    rattle()#调出Rattle界面
    

    菜单栏

    1. 数据读入(Data)

    2. 数据探索(Explore)

    3. 数据相关验证(Test)

    4. 数据转换(Transform)

    5. 聚类分析(Cluster)

    6. 关联规则(Associate)

    7. 构建模型(Mode)

    8. 模型评估(Evaluate)

    9. 日志(Log)

    Data-数据读入

    在数据来源中,通常有来源于表格的数据(Spreadsheet),例如在Excel中建立的数据:来源于数据库的数据(ODBC),例如通过R直接提取MySQL中的数据;来源于R软件中的数据集(R Dataset)等。

    第三行中的参数Partition主要用于数据的划分。在Rattle包中,为了方便进行模型的建立和分析,系统将会把原始数据集划分为三部分:Training、Validation以及Testing。系统将默认划分比例设定为70:15:15,并将按照划分比例从数据集中随机抽取样本。在具体使用过程中,数据集Training主要用于模型的建立,数据集Validation以及数据集Testing主要用于模型评估以及模型测试。

    在确定数据来源与数据划分之后,系统将会列出数据集中的各个变量以及变量的数据类型。在数据对话框中,我们可以选择变量在构建模型时的具体作用。

    这里我们读取气象数据集,其目标是预测明天是否下雨

    在这里插入图片描述

    Explore-数据探索

    Explore选项主要能根据数据集输出关于数据集的一下信息:数据总体概括(Summary)、数据分布情况(Distributions)、数据的相关系数矩阵(Correlation)、数据集的主成分分析(Principal Components)以及各变量之间的相互作用(Interactive)。

    • 描述性统计分析

    例如这里对气象数据集进行描述性统计分析,选中"Summary"之后,点击“执行”。

    在这里插入图片描述

    • 数据的分布

    选中Distributions,查看变量MinTemp的箱线图

    在这里插入图片描述

    在这里插入图片描述

    Test-数据相关检验

    Test选项主要进行的统计检验有:KS检验(Kolmogorov-Smirnov)、威尔克特斯检验(Wilcoxon Rank-Sum)、T检验(T-test)以及F检验(F-test)。

    Transform-数据转换

    选项Transform主要用于数据集的预处理。

    Transform选项对数据的转换主要有4种转换类型,分别为数据标准话(Rescale)、数据插值(Impute)、数据重排列(Recode)以及数据清理(Cleanup)。我们可以看到,在数据转换类型Type的下面一行里,显示出了在数据标准化中将要使用到的标准化方式,例如0-1标准化等。

    Cluster-聚类

    Cluster选项主要存在4种数据的聚类方式,分别为K均值聚类法(KMeans)、自适应的软子空间聚类算法(Ewkm)、层次聚类法(Hierarchical)以及双聚类算法(BiCluster)。在聚类方法Type的下面一行主要用于决定聚类分析的相关参数,例如类别数量以及随机生成器初始值等。

    Mode-构建模型

    第一行是模型类型Type,总共有6种。

    • Tree-决策树
    • Forest-随机森林
    • 组合算法(Boost)
    • 支持向量机(SVM)
    • 线性回归(Linear)
    • 神经网络(Neural Net)

    这里的模型类别并非由R软件自定固定决定,而主要取决于读者电脑中相关的程序包。即读者需要评估何类模型,则应先下载安装相应的模型构建程序包。

    在确定了模型的预测类别后,界面下面将会出现和模型相关的参数。例如从图中关于决策树的参数中我们可以看到,第一个参数值是决策树的最小节点数。在确定模型的类别以及模型相关的参数之后,我们需要点击"执行"按钮进行模型的构建。

    系统在建立出模型之后将会在下面的对话框中展示出模型的相关信息。

    我们取rattle默认的数据集“weather.csv”为例,以随机森林为例,详细情况如下图所示。

    在这里插入图片描述

    上图是利用Rattle程序构建随机森林模型的相关结果输出图。在图中我们可以看到,随机森林模型中决策树的个数为500棵,而每一棵决策树的节点分支处所选择的变量个数为4个。

    在参数决定窗口的旁边有四个按钮。其中,Importance按钮主要用于绘制模型中各变量在不同标准下的重要值图像;Errors按钮主要用于绘制模型中各个类别以及根据袋外数据计算的误判率的图像;OOB ROC按钮主要用户绘制根据随机森林模型的袋外数据计算而得到的ROC图像。例如点击impotrant可以查看模型中各个变量的重要性

    在这里插入图片描述

    上图是通过Importance按钮生成的重要值图像。该图像总体分为两个图像,其中第一个图像为根据精确度平均减少值所计算得出的重要值所绘制;第二个图像为根据节点不纯度减少平均值计算得出的重要值所绘制。图中纵轴为所有变量的名称,横轴为各变量对应的重要值,越在顶层的变量对于模型的重要程度越大。

    在这里插入图片描述

    上图是通过Errors按钮生成的误判率图像。该图中总共有三条颜色的线,这三条线分别代表了肯定结论的误判率、否定结论的误判率以及根据袋外数据计算而得的误判率。该图中纵轴为具体误判率的值,而横轴为随机森林中决策树的数量。查看模型有没有出现欠拟合或过拟合的结果,误判率图像可以用来帮助决策随机森林中决策树的数量。

    Evaluate-模型评估

    Evaluate选项中,Rattle程序包提供了一系列模型评估标准。其中有模型混淆矩阵(Error Matrix)、模型风险表(Risk)、模型ROC图像(ROC)以及模型得分数据集(Score)等各类模型评估指标。

    在模型评估标准类型的下面一行是需要进行评估的模型类别,这一行的选项只有在前面Model选项中已经建立了的模型才可用。在模型类别的选择栏下面一行是数据类型选择栏,Training数据集用于模型构建,而Validation数据集与Testing数据集用于模型评估。

    如选择混淆矩阵,我们选择Error Matrix之后点击执行,查看结果

    在这里插入图片描述

    Log-日志

    选项Log主要用于记录以上所介绍的所有功能的具体执行情况。Rattle非常好的地方就是在日志中会将你执行的所有步骤的R脚本保存,我们可以从日志中学习很多的语法,比如我们执行某个变量的箱线图之后,可以在日志中查看如何通过脚本绘制箱线图。

    R语言基础介绍

    友好编辑器

    RStudio

    区分大小写

    > a<-1:15
    > a
     [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15
    > A
    错误: 找不到对象'A'
    
    > cor(iris[,1:4])#鸢尾花数据集中第1列至第4列变量之间的相关性系数
                 Sepal.Length Sepal.Width Petal.Length Petal.Width
    Sepal.Length    1.0000000  -0.1175698    0.8717538   0.8179411
    Sepal.Width    -0.1175698   1.0000000   -0.4284401  -0.3661259
    Petal.Length    0.8717538  -0.4284401    1.0000000   0.9628654
    Petal.Width     0.8179411  -0.3661259    0.9628654   1.0000000
    > Cor(iris[,1:4])#无法找到Cor这个函数,因此函数也是区分大小写
    Error in Cor(iris[, 1:4]) : 没有"Cor"这个函数
    

    赋值符号

    R语句由函数和赋值构成,R语言的标准赋值符号是<-(即一个小于号加上一个减号)

    > y<-rnorm(5)#创建一个名为y的向量对象,它包含5个来自标准正态分布的随机偏差
    > y
    [1]  1.3800778 -0.9753630  1.5347207 -1.1228029  0.7462479
    

    c(1:4)
    > x
    [1] 1 2 3 4
    > c(1:4)->x
    > x
    [1] 1 2 3 4
    > assign("x",c(1:4))#使用赋值函数assign()
    > x
    [1] 1 2 3 4
    

    注意:

    • R语言允许=为对象赋值,但是它不是标准语法,某些情况下,用等号赋值会出现问题。
    • R语言还有可以反转赋值方向,例如c(1:4)->xx<-c(1:4)等价
    • R语言还有一个赋值函数assign()
    • 使用等号赋值的做法并不常见,不推荐使用

    注释符号

    注释由符号#开头,在#之后出现的任何文本都会被R解释器忽略

    管理工作空间

    查看工作空间

    在R中可以通过ls()查找当前工作空间的对象。

    #创建数据对象
    a<-1:6
    #创建模型对象fit
    fit<-lm(Sepal.Length~Sepal.Width,data=iris)
    fit #得到截距为6.5262,自变量的系数为-0.2234
    #查看模型的详细内容
    summary(fit)
    #创建图形对象p
    library(ggplot2)
    p<-qplot(mpg,wt,data = mtcars)
    p
    ls() #通过ls()命令查找当前工作空间的对象
    
    #通过rm函数移除一个或多个对象
    rm(list = "fit")
    ls()
    
    #移除全部对象
    rm(list = ls())
    ls()
    
    
    > fit
    
    Call:
    lm(formula = Sepal.Length ~ Sepal.Width, data = iris)
    
    Coefficients:
    (Intercept)  Sepal.Width  
         6.5262      -0.2234  
    
    
    
    > summary(fit)
    
    Call:
    lm(formula = Sepal.Length ~ Sepal.Width, data = iris)
    
    Residuals:
        Min      1Q  Median      3Q     Max 
    -1.5561 -0.6333 -0.1120  0.5579  2.2226 
    
    Coefficients:
                Estimate Std. Error t value Pr(>|t|)    
    (Intercept)   6.5262     0.4789   13.63   <2e-16 ***
    Sepal.Width  -0.2234     0.1551   -1.44    0.152    
    ---
    Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
    
    Residual standard error: 0.8251 on 148 degrees of freedom
    Multiple R-squared:  0.01382,	Adjusted R-squared:  0.007159 
    F-statistic: 2.074 on 1 and 148 DF,  p-value: 0.1519
    
    
    > ls()
    [1] "a"   "fit" "p"  
    
    > rm(list = "fit")
    > ls()
    [1] "a" "p"
    
    > rm(list = ls())
    > ls()
    character(0)
    

    显示和修改工作目录

    #显示当前的工作目录
    getwd()
    #修改当前的工作目录
    setwd("mydirectory")
    

    R语言的包

    包是R函数、数据、预编译代码以一种定义完善的格式组成的集合。从某种意义上,R的包就是针对R的插件,相当于Python里面的库,不同的插件满足不同的需求。

    1. 查看包的位置
    > .libPaths()
    [1] "F:/Rsoftware/R3.4.4/R-3.4.4/library"
    
    1. 安装包
    • 通过命令
    install.packages("package_name","dir")#可以省略安装路径dir,默认是安装我们之前的路径
    

    第一次安装的时候需要选择镜像

    在这里插入图片描述

    • 通过工具栏(在RStudion)操作

    在这里插入图片描述

    1. 加载包

    通过library或者require命令加载包

    #加载shiny包并使用runExample函数,必须先加载包之后才能调用里面的函数
    library(shiny)
    runExample()
    runExample("01_hello")
    
    > library(shiny)
    > runExample()
    Valid examples are "01_hello", "02_text", "03_reactivity", "04_mpg", "05_sliders", "06_tabsets", "07_widgets", "08_html", "09_upload", "10_download", "11_timer
    

    shiny包可以实现平台的交互,改变图像中的滑动条,图形就会跟着改变。

    在这里插入图片描述

    查看帮助

    有两种方式

    > help(plot)
    > ?plot
    > ??plot #两个问号,检索所有与plot相关的信息
    

    在RStudio还有另外一种快捷的方式‘

    在这里插入图片描述

    数据结构

    向量

    创建向量

    向量是用于存储数值型、字符型或逻辑型数据的一维数组。执行组合功能的函数c()和相应的参数可用来创建向量。

    各类向量的示例如下

    a<-c(1:4) #数值型变量
    b<-c("one","two","three","four") #字符型变量
    d<-c("TRUE","TRUE","FALSE","FALSE") #逻辑型变量
    
    ab<-c(a,b) #数值型+字符型=字符型
    ab
    
    bd<-c(b,d) #字符型+逻辑型=字符型
    bd
    
    > ab<-c(a,b) #数值型+字符型=字符型
    > ab
    [1] "1"     "2"     "3"     "4"     "one"   "two"   "three" "four" 
    
    
    > bd<-c(b,d) #字符型+逻辑型=字符型
    > bd
    [1] "one"   "two"   "three" "four"  "TRUE"  "TRUE"  "FALSE" "FALSE"
    

    注意:单个向量的数据必须属于相同的类型或模式(数值型、字符型或逻辑型)。如果不是,R将强制执行类型转换

    由于R中内置了同名函数c(),最后不要在编码时使用c作为对项目,否则可能产生一些不易察觉的问题

    标量是只含一个元素的向量,例如 f<-3、g<-"US"、h<-TRUE

    它们用于保存常量。


    查看向量长度

    查看向量中有多少个元素。

    > d<-c(TRUE,TRUE,FALSE,FALSE) #逻辑型变量,可以简写T,F,不过注意要大写
    > length(d) #查看长度
    [1] 4
    

    向量的模式

    > d<-c(TRUE,TRUE,FALSE,FALSE) #逻辑型变量
    > mode(d) #查看模式
    [1] "logical"
    

    向量化

    1. 向量的运算
    #长度相同
    v1<-seq(1,10,2)
    v2<-seq(2,10,2)
    v12<-v1+v2
    v12
    #长度不同
    w1<-c(2,4,6,8)
    w2<-c(10,12)
    w12<-(w1+w2)
    w12
    
    > v12
    [1]  3  7 11 15 19
    
    > w12
    [1] 12 16 16 20
    
    

    解释w12:

    w1的第一个元素2加上w2的第一个元素10等于12

    w1的第二个元素4加上w2的第二个元素12等于16

    本应该的是,w1的第三个元素加上w2的第三个元素,但是w2没有第三个元素,所以这时候就会进行循环,w1的第三个元素6加上w2的第一个元素10,所以等于16;同理,w1的第四个元素8加上w2的第二个元素12等于20.


    注意:如果两个向量的长度不同,R将利用循环规则,该规则重复较短的向量元素,直到得到的向量长度与较长的向量的长度一样


    1. 等差数列的创建
    > seq(1,-9);seq(1.9) # 只给出首项和尾项,by自动匹配为1或-1
     [1]  1  0 -1 -2 -3 -4 -5 -6 -7 -8 -9
    [1] 1
    > seq(1,-9,length.out = 5) # 给出首项和尾项数据以及长度,自动计算等差
    [1]  1.0 -1.5 -4.0 -6.5 -9.0
    > seq(1,-9,by=-2) # 给出首项和尾项数据以及步长,自动计算长度
    [1]  1 -1 -3 -5 -7 -9
    > seq(1,by=2,length.out = 10) # 给出首项和步长以及长度数据,自动计算尾项
     [1]  1  3  5  7  9 11 13 15 17 19
    

    归纳:向量是一维的数据,但是在日常生活中很多数据是二维或者多维的数据,接下来介绍矩阵和数据框。

    矩阵

    矩阵是一个二维数组,每个元素都拥有相同的模式(数值型、字符型或逻辑型)。可以通过函数matrix创建矩阵。

    一般的使用格式为:

    mymatrix<-matrix(vector,nrow = number_of_rows,ncol = number_of_columns,
                     byrow = logical_value,dimnames = list(char_vector_rownames,char_vector_colnames))
    

    其中,vector包含矩阵的元素,nrow和ncol用以指定行和列的维数,dimnames包含了可选的、以字符型向量表示的行名和列名。选项byrow则表明矩阵应当按行填充(byrow=TRUE)还是按列填充(byrow=FALSE),默认情况下是按列填充

    1. 创建矩阵

    代码清单

    w<-seq(1,10)
    
    (a<-matrix(w,nrow=5,ncol=2))# nrow和ncol用以指定行和列的维数
    (b<-matrix(w,nrow = 5,ncol = 2,byrow = T)) # 按行填充
    (d<-matrix(w,nrow=5,ncol = 2,byrow = T,dimnames = list(paste0("r",1:5),paste0(list("l",1:2))))) #给行和列设置名称
    
    > (a<-matrix(w,nrow=5,ncol=2))#
         [,1] [,2]
    [1,]    1    6
    [2,]    2    7
    [3,]    3    8
    [4,]    4    9
    [5,]    5   10
    
    > (b<-matrix(w,nrow = 5,ncol = 2,byrow = T))
         [,1] [,2]
    [1,]    1    2
    [2,]    3    4
    [3,]    5    6
    [4,]    7    8
    [5,]    9   10
    
    > (d<-matrix(w,nrow=5,ncol = 2,byrow = T,dimnames = list(paste0("r",1:5),paste0(list("l",1:2)))))
       l 1:2
    r1 1   2
    r2 3   4
    r3 5   6
    r4 7   8
    r5 9  10
    
    1. 矩阵下标的使用

    我们可以使用下表和方括号来选择矩阵中的行、列或元素。x[i,]选择矩阵x中的第i行,x[,j]选择矩阵x中的第j列,x[i,j]选择矩阵x中的第i行第j列的元素。选择多行或多列的时候,下标i和j可为数值型向量

    (m<-matrix(1:20,nrow=4))
    (mr2<-m[2,])# 选择第2行
    (mc4<-m[,4]) #选择第4列
    (m45<-m[4,5]) #选择第4行第5列的元素
    (mk<-m[c(1,2),c(1,2)])# 选择前两行和前两列的元素
    
    > (m<-matrix(1:20,nrow=4))
         [,1] [,2] [,3] [,4] [,5]
    [1,]    1    5    9   13   17
    [2,]    2    6   10   14   18
    [3,]    3    7   11   15   19
    [4,]    4    8   12   16   20
    
    > (mr2<-m[2,])# 选择第2行
    [1]  2  6 10 14 18
    
    > (mc4<-m[,4]) #选择第4列
    [1] 13 14 15 16
    
    > (m45<-m[4,5]) #选择第4行第5列的元素
    [1] 20
    
    > (mk<-m[c(1,2),c(1,2)])# 选择前两行和前两列的元素
         [,1] [,2]
    [1,]    1    5
    [2,]    2    6
    
    1. 矩阵的合并
    # 矩阵的合并
    (x1<-rbind(c(1,2),c(3,4)))
    (x2<-10+x1)
    (x3<-cbind(x1,x2))# 列合并,小的矩阵合并成更宽的矩阵
    (x4<-rbind(x1,x2)) # 行合并,小的矩阵合并成更长的矩阵
    cbind(1,x1)
    rbind(1,x1)
    
    > (x1<-rbind(c(1,2),c(3,4)))
         [,1] [,2]
    [1,]    1    2
    [2,]    3    4
    
    > (x2<-10+x1)
         [,1] [,2]
    [1,]   11   12
    [2,]   13   14
    
    > (x3<-cbind(x1,x2))#
         [,1] [,2] [,3] [,4]
    [1,]    1    2   11   12
    [2,]    3    4   13   14
    
    > (x4<-rbind(x1,x2)) #
         [,1] [,2]
    [1,]    1    2
    [2,]    3    4
    [3,]   11   12
    [4,]   13   14
    
    > cbind(1,x1)
         [,1] [,2] [,3]
    [1,]    1    1    2
    [2,]    1    3    4
    
    > rbind(1,x1)
         [,1] [,2]
    [1,]    1    1
    [2,]    1    2
    [3,]    3    4
    

    数组

    在R语言中,可以认为数组是矩阵的扩展,它将矩阵扩展到2维以上。如果给定的数组是一维的,则相当于向量,二维的相当于矩阵。

    数组可以通过array函数创建,格式如下:

    myarray<-array(vector,dimensions,dimnames)

    其中vector包含数组中的数据,dimensions是一个数值型向量,给出各个维度下标的最大值,而dimnames是可选的,各维度名称的列表。

    创建数组

    ar1<-array(1:3)#相当于一维的向量:1 2 3
    ar2<-array(1:6,dim = c(2,3))#相当于2行3列的矩阵
    ar3<-array(1:24,dim = c(3,4,2))#相当于创建3×4×2维的数组
    #给出各维度的名称标签
    dim1<-c("a1","a2")
    dim2<-c("b1","b2","b3")
    dim3<-c("C1","C2","C3","C4")
    myarray<-array(1:24,c(2,3,4),dimnames = list(dim1,dim2,dim3))
    myarray
    
    > myarray
    , , C1
    
       b1 b2 b3
    a1  1  3  5
    a2  2  4  6
    
    , , C2
    
       b1 b2 b3
    a1  7  9 11
    a2  8 10 12
    
    , , C3
    
       b1 b2 b3
    a1 13 15 17
    a2 14 16 18
    
    , , C4
    
       b1 b2 b3
    a1 19 21 23
    a2 20 22 24
    

    选取数组中的元素

    myarray[1,2,3]#获取单个元素的值
    myarray["a1","b1","C1"]#通过维度的名称来获取元素值
    myarray[1,,]#组合元素值,获取第1个维度的第一个水平的所有组合元素值
    myarray[2,1,]#获取第1个维度的第2个水平和第2个维度的第1个水平的所有元素值
    
    > myarray[1,2,3]#获取单个元素的值
    [1] 15
    
    > myarray["a1","b1","C1"]
    [1] 1
    
    > myarray[1,,]
       C1 C2 C3 C4
    b1  1  7 13 19
    b2  3  9 15 21
    b3  5 11 17 23
    
    > myarray[2,1,]#获取第1个维度的第2个水平和第2个维度的第1个水平的所有元素值
    C1 C2 C3 C4 
     2  8 14 20
    

    数据框

    由于不同的列可以包含不同的模式(数值型、字符型等)的数据,数据框的概念较矩阵来说更为一般。

    • 读取excel/txt等格式数据集的时候,也是以数据框对象输入
    • 数据分析算法函数的输入对象都是数据框对象
    • 数据框可通过==data.frame()==创建

    常用的格式

    mydata<-data.frame(col1,col2,col3,……)

    其中的列向量col1,col2,col3,……可谓任何类型(如字符型、数值型或逻辑型)。每一列的名称可由函数names指定。

    创建数据框

    site<-c("a","b","c","d","e")
    number<-c(1:5)
    luoji<-c(T,F,T,F,T)
    (DT<-data.frame(site,number,luoji))
    names(DT)#读取数据框的列名
    names(DT)[1]<-"Aw" #修改第一列列名为Aw
    names(DT)
    
    > (DT<-data.frame(site,number,luoji))
      site number luoji
    1    a      1  TRUE
    2    b      2 FALSE
    3    c      3  TRUE
    4    d      4 FALSE
    5    e      5  TRUE
    
    > names(DT)#读取数据框的列名
    [1] "site"   "number" "luoji" 
    
    > names(DT)[1]<-"Aw" #修改第一列列名为Aw
    > names(DT)
    [1] "Aw"     "number" "luoji" 
    

    注意:每一列的数据的模式必须唯一,不过你却可以将多个模式的不同列放到一起组成数据框。


    选取数据框的元素

    选取数据框中元素的方式有若干种,可以使用前述(如矩阵)下标记号,亦可直接指定列名。

    DT[1:2]# 下标的方式
    DT[c("Aw","luoji")] # 指定列名
    DT$Aw #记号$
    

    第三个例子中的记号$是新出现的,它被用来选取一个给定数据框的某个特定变量。

    > DT[1:2]
      Aw number
    1  a      1
    2  b      2
    3  c      3
    4  d      4
    5  e      5
    
    > DT[c("Aw","luoji")]
      Aw luoji
    1  a  TRUE
    2  b FALSE
    3  c  TRUE
    4  d FALSE
    5  e  TRUE
    
    > DT$Aw
    [1] a b c d e
    

    如果想要生成Aw和luoji两个变量的列联表,以下代码可以实现

    > table(DT$Aw,DT$luoji)
       
        FALSE TRUE
      a     0    1
      b     1    0
      c     0    1
      d     1    0
      e     0    1
    

    每个变量名前都键入一次DT很浪费时间,可以采用attach()函数和detach()函数来实现。其中attach()是将数据框绑定到R的搜索路径中,R中遇到一个变量名以后,将检查搜索路径中的数据框,以定位到这个变量。detach()是解除绑定。

    attach(DT) 
    table(Aw,luoji)
    detach(DT) # 解除绑定
    

    因子

    变量可归结为名义型、有序型或连续型变量。名义型变量是没有顺序之分的类别变量。糖尿病类型Diabetes(Type1、Type2)是名义型变量的一例。即使在数据中Type1编码为1而Type2编码为2,这也并不意味着二者是有序的。有序型变量表示一种顺序关系,而非数量关系。病情Status(poor, improved, excellent)是顺序型变量的一个上佳示例。我们明白,病情为poor(较差)病人的状态不如improved(病情好转)的病人,但并不知道相差多少。连续型变量可以呈现为某个范围内的任意值,并同时表示了顺序和数量。年龄Age就是一个连续型变量,它能够表示像14.5或22.8这样的值以及其间的其他任意值。很清楚,15岁的人比14岁的人年长一岁。类别(名义型)变量和有序类别(有序型)变量在R中称为因子(factor)

    函数factor()以一个整数向量的形式存储类别值,整数的取值范围是[1… k ](其中k 是名义型变量中唯一值的个数),同时一个由字符串(原始值)组成的内部向量将映射到这些整数上。

    名义型变量

    diabetes<-c("Type1","Type2","Type3","Type1")

    语句diabetes <- factor(diabetes)将此向量存储为(1, 2, 1, 1),并在内部将其关联为1=Type1和2=Type2(具体赋值根据字母顺序而定)。针对向量diabetes进行的任何分析都会将其作为名义型变量对待,并自动选择适合这一测量尺度的统计方法。

    > diabetes<-c("Type1","Type2","Type3","Type1")
    > diabetes<-factor(diabetes)
    > mode(diabetes)
    [1] "numeric"
    > diabetes
    [1] Type1 Type2 Type3 Type1
    Levels: Type1 Type2 Type3
    

    有序型变量

    表示有序型变量,需要为函数factor()指定参数ordered=TRUE

    state<-c("Poor","Imporoved","Excellent","Poor")

    > status<-factor(status,ordered = TRUE)
    > mode(status)
    [1] "numeric"
    > status
    [1] Poor      Excellent Improved  Poor     
    Levels: Excellent < Improved < Poor
    

    语句status <- factor(status, ordered=TRUE)会将向量编码为(3, 2, 1, 3),并在内部将这些值关联为1=Excellent、2=Improved以及3=Poor。另外,针对此向量进行的任何分析都会将其作为有序型变量对待,并自动选择合适的统计方法。

    对于字符型向量,因子的水平默认依字母顺序创建。这对于因子status是有意义的,因为“Excellent”、“Improved”、“Poor”的排序方式恰好与逻辑顺序相一致。如果“Poor”被编码为“Ailing”,会有问题,因为顺序将为“Ailing”、“Excellent”、“Improved”。如果理想中的顺序是“Poor”、“Improved”、“Excellent”,则会出现类似的问题。按默认的字母顺序排序的因子很少能够让人满意。

    可以通过指定levels选项来覆盖默认排序

    newstatus<-factor(status,ordered = TRUE,levels = c("Poor","Improved","Excellent"))
    newstatus
    
    [1] Poor      Excellent Improved  Poor     
    Levels: Poor < Improved < Excellent
    

    各水平的赋值将为1=Poor、2=Improved、3=Excellent。请保证指定的水平与数据中的真实值相匹配,因为任何在数据中出现而未在参数中列举的数据都将被设为缺失值。

    创建因子

    patientid<-c(1:4)
    diabetes<-c("Type1","Type2","Type3","Type1")
    status<-c("Poor","Excellent","Improved","Poor")
    diabetes<-factor(diabetes)
    status<-factor(status,ordered = TRUE)
    #将数据合并为一个数据框
    patientdata<-data.frame(patientid,diabetes,status)
    str(patientdata)#输出对象的结构
    summary(patientdata)#显示对象的统计概要
    
    > str(patientdata)#输出对象的结构
    'data.frame':	4 obs. of  3 variables:
     $ patientid: int  1 2 3 4
     $ diabetes : Factor w/ 3 levels "Type1","Type2",..: 1 2 3 1
     $ status   : Ord.factor w/ 3 levels "Excellent"<"Improved"<..: 3 1 2 3
    
    > summary(patientdata)#显示对象的统计概要
       patientid     diabetes       status 
     Min.   :1.00   Type1:2   Excellent:1  
     1st Qu.:1.75   Type2:1   Improved :1  
     Median :2.50   Type3:1   Poor     :2  
     Mean   :2.50                          
     3rd Qu.:3.25                          
     Max.   :4.00 
    

    首先,以向量的形式输入了数据。然后,将diabetes和status分别指定为一个普通因子和一个有序型因子。最后,将数据合并为一个数据框。函数str(object)可提供R中某个对象(本例中为数据框)的信息。它清楚地显示diabetes是一个因子,而status是一个有序型因子,以及此数据框在内部是如何进行编码的。

    注意,函summary()会区别对待各个变量。它显示了连续型变量=的最小值、最大值、均值和各四分位数,并显示了类别型变量diabetes和status(各水平)的频数值

    列表

    R语言中的列表与R语言中的向量、数组和矩阵不同,它的每个分量的数据类型可以是不同的

    列表是对象的集合,可以包含向量、矩阵、数组,数据框,甚至是另外一个列表,且在列表中要求每一个成分都要有一个名称。

    列表中的对象又称为它的分量(components)。

    在R语言中可以使用==list()==函数来创建列表,其语法格式为:

    mylist<-list(name1=object1,name2=object2,……)

    创建列表

    a<-c("A同学","B同学","c同学")
    b<-c("数学","计算机","英语")
    e<-c(88,89,99)
    mylist<-list(st.name=a,major.course=b,test.grade=e)
    mylist
    
    $st.name
    [1] "A同学" "B同学" "c同学"
    
    $major.course
    [1] "数学"   "计算机" "英语"  
    
    $test.grade
    [1] 88 89 99
    

    列表的索引

    mylist[1]#访问列表中的第一个成分,返回结果为一个列表
    
    mylist[[1]]#访问列表中的第一个成分的元素值,这次仅是元素值,是向量,不是列表
    
    mylist[[1]][1]#访问列表中的第一个成分的第一个元素值
    
    mylist[[1:2]]#访问列表中的第一个到第二个成分
    
    mylist[c(1,3)]#访问列表中的第一个和第三个成分
    
    mylist$st.name#访问列表中名称为st.name的元素值
    
    mylist$st.name[1]#访问列表中名称为st.name中的第一个元素值
    
    mylist["major.course"]#访问列表中名称为major的成分,其结果为一个列表
    
    mylist[["major.course"]]#访问列表中名称为major的元素值
    
    mylist["major.course"][1]#访问列表中名称为st.name中的第一个元素值
    

    编辑列表

    1. 修改某个成分的元素值
    mylist[[1]][1] = '李小东'
    mylist$st.name[2] = '黄铭'
    mylist[["st.name"]][3] = '陆远风'
    mylist
    
    $st.name
    [1] "李小东" "黄铭"   "陆远风"
    
    $major.course
    [1] "数学"   "计算机" "英语"  
    
    $test.grade
    [1] 88 89 99
    
    1. 修改某一成分的所有值
    mylist$major.course = c("数学分析","计算机思维与结构", "大学英语")
    mylist[[3]] = c(88.3,89.2,99.1)
    mylist
    
    $st.name
    [1] "李小东" "黄铭"   "陆远风"
    
    $major.course
    [1] "数学分析"         "计算机思维与结构" "大学英语"        
    
    $test.grade
    [1] 88.3 89.2 99.1
    
    1. 添加一个成分
    mylist$no<-c(1601,1602,1603)
    mylist<-c(mylist,hobby = list(c("篮球","排球","羽毛球")))
    
    1. 删除某一个成分
    mylist$st.name = NULL
    mylist[1] = NULL
    mylist[-1]
    

    数据的读取

    读取文本文件

    # 数据的导入
    # 设置工作路径
    setwd("D:/data")
    getwd()
    # 另外一种路径的设置
    #setwd("D:\\data")
    
    #文本文件的导入
    importtxt<-read.table("iris.txt",header = TRUE)
    #header=TRUE表示数据文件第一行中带有变量名。因为table默认的分隔符是空格,和txt一致,所以不需要进行分隔符的参数设置
    
    importcsv<-read.table("iris.csv",header=T,sep=",")
    #默认情况下,R语言会认为第一行的是数据的标题,假如你的数据的第一行并不是标题,可以设置header=F
    #对于csv文件,还可以利用read.csv读取
    importcsv2<-read.csv("iris.csv",header = T)
    
    #查看前5行,默认是前6行
    head(importtxt[c(1:5),])
    head(importcsv2)
    
    > head(importtxt[c(1:5),])
      Sepal.Length Sepal.Width Petal.Length Petal.Width Species
    1          5.1         3.5          1.4         0.2  setosa
    2          4.9         3.0          1.4         0.2  setosa
    3          4.7         3.2          1.3         0.2  setosa
    4          4.6         3.1          1.5         0.2  setosa
    5          5.0         3.6          1.4         0.2  setosa
    
    
    > head(importcsv2)
      Sepal.Length Sepal.Width Petal.Length Petal.Width Species
    1          5.1         3.5          1.4         0.2  setosa
    2          4.9         3.0          1.4         0.2  setosa
    3          4.7         3.2          1.3         0.2  setosa
    4          4.6         3.1          1.5         0.2  setosa
    5          5.0         3.6          1.4         0.2  setosa
    6          5.4         3.9          1.7         0.4  setosa
    

    读取非结构化文本文件

    使用readLines()函数,按行读入数据

    # 读取非结构化文本文件,每行的长度都不一样
    unstructuredtxt<-readLines("unstructuredText.txt")
    
    unstructuredtxt
    
    > unstructuredtxt
    [1] "R语言是一套开源的数据分析解决方案,几乎可以独立完成数据处理、数据可视化、数据建模及模型评估等工作,而且可以完美配合其他工具进行数据交互。具体来说,R语言具有以下优势:"
    [2] "1)高效的数据处理能力"                                                                                                                                                 
    [3] "2)数据分析"                                                                                                                                                           
    [4] "3)数据可视化"                                                                                                                                                         
    [5] "4)通过庞大的R程序包库文件进行扩展" 
    

    读取网络数据

    网址:http://www.justinmrao.com/salary_data.csv

    salarydata<-read.csv("http://www.justinmrao.com/salary_data.csv")
    head(salarydata[c(1:3),])
    
    > head(salarydata[c(1:3),])
                     team    year       player contract_years_remaining contract_thru position full_name
    1      Boston Celtics 2002-03 Bremer, J.R.                        1       2002-03        G    Bremer
    2 Cleveland Cavaliers 2003-04 Bremer, J.R.                        1       2003-04        G    Bremer
    3   Charlotte Hornets 2001-02  Brown, P.J.                        7       2002-03        F     Brown
      salary_year salary_total year_counter obs mean_salary mean_remaining
    1      349458       349458            1   2    456568.5              1
    2      563679       563679            2   2    456568.5              1
    3     6404800     36000000            1   6   7668267.0              5
    

    R语言的基础绘图

    散点图

    普通散点图

    par(mfrow=c(1,2)) # 绘制一行两列的散点图
    plot(x=rnorm(10))
    plot(women)
    

    在这里插入图片描述

    散点图矩阵

    plot(iris[,1:4],main="利用plot函数绘制散点图矩阵")
    pairs(iris[,1:4],main="利用pairs函数绘制散点图矩阵")
    

    在这里插入图片描述

    柱状图和条形图

    #柱状图和条形图
    par(mfrow=c(1,2))
    for (i in c(F,T)) {barplot(VADeaths,horiz = i,beside = T,col = rainbow(5))
    }#当horiz=T,绘制条形图,F则绘制柱状图
    

    在这里插入图片描述

    绘制饼图

    pie(table(mtcars$cyl))#绘制饼图
    

    在这里插入图片描述

    绘制Q-Q图

    qqnorm(economics$psavert)
    

    在这里插入图片描述

    箱线图

    boxplot(iris$Sepal.Length~iris$Species,col=rainbow(3))
    

    在这里插入图片描述

    茎叶图

    > stem(mtcars$wt)
    
      The decimal point is at the |
    
      1 | 5689
      2 | 123
      2 | 56889
      3 | 22224444
      3 | 55667888
      4 | 1
      4 | 
      5 | 334
    

    点图

    #点图
    dotchart(mtcars$mpg,labels = rownames(mtcars))
    

    在这里插入图片描述

    R语言描述性统计分析

    1. 平均数
    > xmean<-mean(x)
    > (xmean<-mean(x))
    [1] 5.5
    
    1. 中位数
    > (xmedian<-median(x))
    [1] 5.5
    
    1. 百分位数
    
    
    1. 描述性统计函数
    • summary()函数
    > vars<-c("mpg","hp","wt")#重点关注每加仑汽油行驶英里数(mpg)、马力(hp)和车重(wt)
    > summary(mtcars[vars])
          mpg              hp              wt       
     Min.   :10.40   Min.   : 52.0   Min.   :1.513  
     1st Qu.:15.43   1st Qu.: 96.5   1st Qu.:2.581  
     Median :19.20   Median :123.0   Median :3.325  
     Mean   :20.09   Mean   :146.7   Mean   :3.217  
     3rd Qu.:22.80   3rd Qu.:180.0   3rd Qu.:3.610  
     Max.   :33.90   Max.   :335.0   Max.   :5.424  
    
    > summary(iris[,5])# 对因子变量进行频数统计
        setosa versicolor  virginica 
            50         50         50 
    
    • Hmisc包中的describe()函数
    library(Hmisc)
    describe(mtcars[vars])
    
    mtcars[vars] 
    
     3  Variables      32  Observations
    ---------------------------------------------------------------------------------------------------------
    mpg 
           n  missing distinct     Info     Mean      Gmd      .05      .10      .25      .50      .75 
          32        0       25    0.999    20.09    6.796    12.00    14.34    15.43    19.20    22.80 
         .90      .95 
       30.09    31.30 
    
    lowest : 10.4 13.3 14.3 14.7 15.0, highest: 26.0 27.3 30.4 32.4 33.9
    ---------------------------------------------------------------------------------------------------------
    hp 
           n  missing distinct     Info     Mean      Gmd      .05      .10      .25      .50      .75 
          32        0       22    0.997    146.7    77.04    63.65    66.00    96.50   123.00   180.00 
         .90      .95 
      243.50   253.55 
    
    lowest :  52  62  65  66  91, highest: 215 230 245 264 335
    ---------------------------------------------------------------------------------------------------------
    wt 
           n  missing distinct     Info     Mean      Gmd      .05      .10      .25      .50      .75 
          32        0       29    0.999    3.217    1.089    1.736    1.956    2.581    3.325    3.610 
         .90      .95 
       4.048    5.293 
    
    lowest : 1.513 1.615 1.835 1.935 2.140, highest: 3.845 4.070 5.250 5.345 5.424
    ---------------------------------------------------------------------------------------------------------
    

    参考资料

    展开全文
  • R语言基本知识

    千次阅读 2018-08-08 01:41:31
    目前看的是R语言实战这本书 1、当输入png("lxc.png")这种需要加双引号。但是如果在括号中多加了一个双引号,那么"lxc.png"", R ide就会显示是函数输入的类型,显示加号,原因是双引号没有...

    目前看的是R语言实战这本书

    1、当输入png("lxc.png")这种需要加双引号。但是如果在括号中多加了一个双引号,那么"lxc.png"", R ide就会显示是函数输入的类型,显示加号,原因是双引号没有匹配,自己输错了,所以遇到没有匹配的直接输入缺失的匹配即可。

    2、但是还有一点很重要,R给人感觉就是png("lxc.png")这个好像是打开画板,但是如果下面不画画是什么都没有的,并不是说ide界面上显示图像了,就可以直接png()保存了,其实png就是打开画板,然后画图句子使用,然后dev.off()这个函数关闭画板才会flush到真正的文件中。同理,pdf()都是如此。保存图片与图片自身是否显示无关。

    3、help("sink")记得加引号。而其中sink函数的结束方法是再次输入空参数。sink()即可。file="lxc"注意要添加双引号。当然sink函数使用也是,先打开,然后后面的输出才写上,当然结束不再是dev.off()而是sink()参数空即可。

    4、options(digits=3)其中options是显示(空的时候就是显示)或者设定R的运行环境变量。而digits=3表示显示小数点3个数长。默认是7.

    5、对普通的画图为:

    plot(number, count, yaxt="n", xaxt="n",xlab="x 轴名字",type="b")

    上述表示为:yaxt xaxt都是将数据轴的标度和标度值完全去掉,但是可以设置轴的名字,后面设置标度和标度值使用:

    axis(side=1, at=c(1,3,5,6,7), lables=(ni, hao, a , man, go));等均可匹配,at表示刻度值范围。

    但是有个问题就是太拥挤的不可见怎么缩小y轴的尺寸,而缩小尺寸值是在axis()命令设置at这个参数的时候就设置,使用cex.axis=0.5就表示缩小一半。而当直接使用默认的坐标刻度的时候,那么就在plot中直接放cex.axis=0.5即可。同样两个地方可以用的有:cex.lab=0.5 只缩放坐标轴的名称。 cex.main=0.只缩放主标题  cex.sub只缩放副标题。

    当然上述除了axis要设置at值,还有par函数,但是该函数主要是作用于整个画布环境,设置完后,不会对当前已经显示的影响,而只会影响后面重新生成的图片。可以设置,par(cex.axis=0.5, )

     

    其中设置画布大小的为:par(pin(11,7))是目前自己试出来的最大画布。

    6、对于定义的function来说,x<-function(type=1){}

    这种function中的参数意思是有一个参数,如果你不输入参数默认就是1,所以参数仍然是一个,虽然看着是个等式

    7、时间函数是大写Sys.time()这个就足以输出了,但是如果想自己控制格式用format(Sys.time(), "%a,%b,%d,%y") 与"%A,%B,%d,%y"显示还不一样,后者显示的星期和月份都是全称,而前者是缩写因为是小写的a b

    8、对于read.table()读txt文件的时候,需要使用read.table("路径加引号",seq="空格还没识别出来")

    然后读成矩阵或者数据框。重命名其中列名用names(xxx)[n]<-c(x,x,x,x)必须是向量,不能是标量,但是单个的时候还是可以的例如单个1默认成向量1,单个字符串加双引号默认成单个向量。且必须是xxx[n]两者分开使用好奇怪。或者names()[1:n]都修改。

    实在不会修改,还有fix()这个函数将数据框显示成表格让你使用。

    rename(data3, c(oldname="newname".......))而 直接names(data3)是打印出原有的表头列名字。

    9、对取出来的值进行判断是否空缺,is.na()即可对向量判断,也可以对数据框进行判断。

    10、apply函数是对矩阵,数组,数据框的一个维度上面使用函数的,apply(x, margin, fun, ...)而sapply(x, fun, option)和lapply(x, fun , option)  其中sapply是对任何数据都可用,而lapply是用于list专用。

    11、就是说对于TRUE当参数,只能将向量类型的传进去,例如一个矩阵10*3,怎么把矩阵中全部是数字的给输出出来,那么就是将矩阵这个矩阵转为由TRUE填充的矩阵,这样就可以将其当成参数,而如果只用下标表示,那么不行。mean(!is.na(x))这样才行。就是说TRUE值想起作用,只能以数据结构形式组织起来当成参数使用

    12、注意自己可以创造逻辑值。例如y<-c("c","b","a")是一个向量用is.na()判断倒是能够生成3个逻辑值。而自己用c(TURE,TRUE,TRUE)才是一个逻辑值向量。与11条相结合就可以将向量或者数据框的内容利用逻辑向量编程一个向量使用。因为涉及到数据计算的时候,有时候只能使用纯数值的向量,不能使用数据框去计算。例如sd()标准差函数,只能使用vectory这种类型对于mtcars这种date.frame不能直接计算的。

    13、x=read.table(file.choose())这个还让选择路径。哈哈。

    14、对于不规则的txt文件,那么使用readLines(“路径”)函数,即可得到字符串向量,是真的大啊。例如自己的 chr [1:93906]有这么多行。必须得一行一行分析,首先怎么去掉特定的一些内容??

    其实处理文本这些脏活是可以给python来处理的。。!!先处理了再用R来统计也行。

    下面专门开始学习的『正则表达式』和『字符处理函数』https://www.cnblogs.com/awishfullyway/p/6601539.html

    nchar()字符串长度。它与length()函数的区别是后者统计的是元素个数。

    paste()是用于黏合多个字符串到一个字符串上的。即使有不是 字符串的内容也能转换为字符串、

    strsplit()函数正好是将字符串按照某种形式进行划分的。是paste()的逆向操作。(参数是同样的可以输入以什么做间隔的双引号即可)

    substr()字符串截取函数,参数是:从子集开始位置到终止位置。就是源头参数加两个数字。substring()函数同样。

    gsub()字符串替代,找到sub字符串然后用新的字符串代替。而sub()函数只替换第一个发现的结果,并不会都替换的。而chartr()函数也是字符串替换。

    grep()字符串匹配。搜索到后返回其位置索引。grepl()函数多了一个l表明找到索引后返回的是逻辑值。

    大小写转换函数,toupper(), tolower(), casefold(),

     

    字符(串)的格式化(定制)输出函数:sprintf()、sink()、cat()、print()、strtrim()、strwrap()

     

    例子:strsplit(x, split="\\s+")  这个效果等效于strsplit(x, split=" ")其中s+是正则表达式中所有与空格相关的空格项。

     

    例子中: num1<-grep(pattern="for finished",x)表示的是只要有个元素中含有这部分pattern内容,那么就返回这个元素的下标。只要x1<-x[-num1]其中num1是一些下标组成的数组。

    怎么去除方括号内的内容??有什么命令。

    gsub("\\(.*\\)","",字符串)例如这个就是匹配到括号内所有值的,替换即可。

     

    1、向量就是使用c表示连接的,并且向量的元素表示就是与数组相同为:x[1]或者x[2:5]都行。

    2、超级赋值<<-赋值运算符,可以在函数内给全局变量赋值。

    3、查看类型mode(x)

    4、矩阵往向量处变化时候,使用m<-rbind(c(), c())可以生成一个矩阵。因此矩阵含有行,列。同样矩阵使用下标索引,但是单个元素使用两个下标,而想找一行或者一列的,那么使用的下标是:   逗号和一个值。 m[,1]表示第一列。而创建矩阵方法:m<-matrix(vector,nrow=, ncol=, byrow=TRUE, dimnames=list(rname,cname))  其中rname cname分别是字符串向量。此时涉及到了一个行列名称问题,但是还没有学习list的。

    5、矩阵都是2维的,而只有数组才是可以使维数超过2维,但是数组同样是同类型的元素。a<-arrary(vector, dimensions, dimnames)  其中vector是数据,第二个是数值向量。第三个是名称列表。已经说明了其内容。

    6、列表list是与向量很像,但是每个元素都可以扩充为一组元素组成的向量(向量可以由不相同的元素组成,只是都看成字符而已)。所以才会出现list(rname,cname)这样才是将其按照同等地位组合在一起,很多时候是一个函数的返回值,更像结构体,各种类型都可以放进去返回,例如hist(Nile)这个返回值就是一个list类型。而list的访问也是使用mingcheng $xxx  例如:x<-list(u=2,v="abc")那么x$u就是2.

    注意也就是list使用美元访问,但是也是在有listname情况下,如果没有listname的话,是不能使用$的。。。只能使用双方括号!!![[ ]]。然后选中一个小组件,然后再用另外方括号选择更小的内部例如:x[[1]][2]和y$u[2]效果是一样的。都是选第一组中的第二个元素。           数组矩阵是为了使用数据的几行几列,而list是为了更简便粗暴地包含更多元素内容

    list也很特殊,当元素相同时候,可看成向量,不相同的时候,可看成数据框,不看成向量即可。

    7、数据框           数据框其实就是列表,只是数据框是以不同类型元素的数组类型表示的。可以看成由同一列构成的向量当成list的每个成员。。。内容都一样,只是组织形式不一样,有时候统计员工信息,肯定数据框更方便显示,但是硬把每一列当成向量。而数据框要当成数组使用,所以访问元素使用下标要更好的。

    d<-data.frame(list())这种方式组成数据框,也能看出其与list相同。而数据框一般是通过读取文件和数据库得到的。

    使用方括号取值,不同级别才用[][]类型,例如list中的矩阵类。而相同级别的使用[x,y]这种。。数据框中直接p[1:2]取值,表明取1和2列。。类似于list.

    8、因子是为了给向量进行分类,并将其存储为级别的数据对象,

    9、R语言类的意义:就是函数会根据数据类型的不同,做出不同的处理,例如summary()函数,自己就不用担心数据类型。

    10、read.table()得到的是数据框类型的r对象,

    11、可以使用attributes()列出所有组件。而str()  mode()都是一种打印,而summary()打印的信息更详细。 typeof()是查看数据类型。

    12、R都是使用一种方法解出一种答案。

    13、想得到函数help函数名不用加双引号,但是如果是特殊字符或者一些保留字例如for那就要加上双引号查询了。

    14、example(seq)这个就是给你一系列使用方法,而画图总example(persp)就是各种等高线图。按回车键就是下一个图片显示。

    15、谷歌搜索技巧:filetype:R  permutations -rebol  表示搜索文件类型是R的语言脚本,并且排除rebol类型。

    16、自动补齐,能看出来。20位加上1:2就是自动补齐。  向量化就是函数对每个元素应用函数。 查找向量的一部分。

    本来R中可以不定义就使用,但是涉及到部分成员,那是不行的,y[1]=5就不对,必须y<-vector(length=2)然后赋值。y[1]  y[2]   即可。等效于y<-c()

    17、R语言中运算符都是一个函数,所以可以做向量式运算的。

    18、很重要向量的取部分使用的索引:  向量索引:  向量1 [向量2]  返回的是向量1中索引为向量2的那些值。 下标可以重复使用,符号代表删除

    19、符号:也可以创造向量的!!! 冒号比加减更有优先级。输入?syntax就可以显示出符号优先级。  seq也可以创建向量。但是seq还有个用途就是参数非空的时候,seq(x)与1:length(x)等效。即使x<-c(5,11,9)都可以得到的是:seq(x)是1,2,3

    20、req()函数同样可以生成一个向量。

    21、any() all()函数都是判断逻辑值的。

    22、round函数是四舍五入。

    23、sapply()函数是对向量使用,然后返回矩阵类型。

    24、在函数中加上na.rm=TRUE就可以将na无效值给删除掉。

    25、%%求余运算。 NULL是什么都没有,而NA是会一直存在,只是表达无效而已。所以a<-NULL 时候a<-c(a, 1)这种是会不显示NULL的,但是NA的话还是会在的为NA,1

    26、z[z*z<8]表示的是索引为布尔值向量。所以可用有效。

    27、向量x中所有大于3的值替换为0那么一行就可以x[x>3]<-0

    28、subset的删选可以去掉NA,  subset(x, x>5)

    29、which(z*z>8)返回的是下标组成的向量。当然也是根据布尔向量判断出来的下标。

    30、就是看着的ifelse(b,u,v)同样是对b,u,v这三个向量中每个元素进行的判断!!!!

    31、判断两个向量是否相等,使用==是对每个元素判断,这样不好。而all()  identical()函数则是完全判断成一个结果。但是identical有点太谨慎,同样值是1一个整数,一个浮点数,虽然值都是1也不行。

    32、name()函数是查看名字或者命名,而name(x)<-NULL则是去除名字。

    32、注意,R语言是可以比c语言少for循环的,因为其可以向量化的特征,所以很容易从向量集中得出某些特征的值。但是如果涉及到重新排序的类似操作,那么必须得有个新的向量被定义出来使用,原向量只是操作对象。例如找到每个单词的出现次数,就是将单词作为标签创建一个新的list即可,然后在此基础上还能排列词频顺序,使用order返回的是对应的索引值!!这样就简化多了,因为将order结果直接用于向量索引就是新的向量或者链表

    33、还有,由于数据框要比list约束多,当然数据框是隶属于list的,所以数据框可以使用list的访问方式访问数据框,但是list却不能使用数据框的矩阵访问方式。因为数据框就是比list多出一个矩阵结构。

    34、subset函数里面是有两个参数的,第一个是数据集,第二个是判断条件,而平常是将判断条件产生的布尔向量当成索引的,但是为了防止NA的破坏,所以使用subset自动删除NA

    35、complete.cases是对数据框中的行进行NA判断产生布尔值的。可以用于删除NA的索引。

    36、对于数据框可以使用rbind和cbind.但是添加的长度要符合原数据框。添加也可以直接list$a<-就算是添加了。多用于类似矩阵的数据框添加新列等操作。

    37、前面提到apply一般是用于向量的,因为向量的类型相同,而apply也可以用于数据框,只是要求数据框内容要完全类型相同,例如对于数据进行mean计算。apply(frame, 1, hanshu)表示对每一行进行hanshu操作。

    38、一般来说,数据框的数据处理,是想使用因子的,而list的使用是不想使用因子,如果read的字符串不想当成因子,那么使用stringisfactor=TRUE,true表示不当成因子这个有点相反的意思。,

    39、merge()用于合并有相同列名称的两个数据框,还有by.x  by.y两个参数,用于指定合并数据框中值相同但是名称不同的情况。这样就可以按照指定来合并了。merge(a,b, by.x=行数,by.y=行数)

    40、判断数据框中每个记录行是否有相同的长度,使用count.fields("数据集", sep=",") 就可以得到每个记录行的长度,然后使用all判断上述结果向量是否全部大于某个值。。

    41、如果对数据框使用lapply那么就是用于数据框的每个列!!!并且返回值成了列!!!

    42、当你想按照某个列的值排序并保持数据框中的变量关系不变,例如一个人的年龄还是这个人的年龄,不会变错位。那么就要使用因子了,所以因子适用于数据框是有原因的。。

    43、因子对应的是统计学中的名义变量或者分类变量。,本质不是数字,

    44、因子可以看成是包含了更多信息的向量。更多的信息一般是指不同的level.  可以使用factor函数将向量变为一组因子。例如x<-c(5,12,3,12)得到的因子是3个level。cf<-factor(x)cf只有三个level但是length(cf)显示的是实际数据长度不是因子的level长度

    45、因子向量,首先包含的是数据,只是根据数据,然后进行的因子分类,所以包含的数据就是数据,只是factor因子化后多包涵了特性,levels而已。所以在给因子向量添加levels时候,是不显示在数据中的。直到添加真正数据,而一旦成因子再添加不存在的level的数据就会报警告被识别成NA。所以需要加入新的level,而加入新的level看着好像是加入数据,其实是level,虽然他们的值相等。加入level为:newf<-factor(原向量, levels=c(a,b,c))像这样加入新的level值,才能用newf[3]<-数据。 这种给值改数据。

    46、即使是向量你认为只有20这么长,但是使用f[21]<-数据   那么就可以得到数据的增长。没有问题的,前提是有个f已经存在了。那么输入f[23]的数据,此时22处的数据就默认是NA了。长度是23.

    47、tapply(x, f, g)用于针对某个因子对某个数据集合进行某种函数的操作,所以可以看到是三个元素。数据集合(数据框中的一组向量!!!不能是数据框本身,例如对工资统计平均值。只能是工资数据。因子为年龄和性别两个即可。),因子列表,函数g

    其中x的向量的元素个数要与f因子向量的元素个数相同。因为按照因子向量分配的,不能x样本中有逃离在f因子level之外的吧。当然因子可以是两个因子。使用list(因子1,因子2)

    tapply的核心是将数据按照因子分成不同的数据组,然后对每组使用指定函数。

    并且f这个值可以是list例如:list(c(1,2,3),c(a,b,c))就是说按照两种因子进行分类,就类似与按照年龄和性别分别对工资归类。!!并不是单纯地当成123abc  这样6个等效的向量。是两个分类标准因子

    48、而split是只做tapply的分组步骤,就是分类使用的。但是split(x,f)中x可以是数据框。split返回的值是列表类型。因为tapply是使用函数计算,所以返回的是值。

    49、排列文本,那么使用split(1:length(x), x) x是一个列表时候,即将顺序数字按照x的因子类型分类,这样就将txt文本内容按照相同值将其位置归纳到结果的同一个list元素中了。

    50、将数据框数据变为向量来处理,为:ee<-as.matrix(x)  dd<-as.vector(ee)即可。

    51、by函数与tapply函数是类似的,区别在于by函数的x可以是任何类型,不再是一个向量的约束了。

    52、lm()函数是组线性liner model 就是这种线性拟合的,对两列值得出线性表达式的参数值。例如:lm(a~b)  就是对a=kb+c进行拟合。

    53、table函数适用于统计:将每个向量都当成因子向量来分别分类,然后做成矩阵图表示发生的次数。例如:f<-list(c(1,2,3), c(a,b,c))。 table(f)表示的是把f当成因子向量进行统计,得出一个3*3统计次数的矩阵。主要用于统计发生次数。例如既是1又是a的次数1.  当然table的参数可以是数据框,毕竟list与数据框都类似。统计的类型都是单个人以行统计,就是一行是一个人的所有信息,而统计的是按照所有信息分类的人数之和。

    54、说的表就是有table函数生成的,由于table函数是生成的数字,所以表就是数据矩阵或者数组,当然可以用矩阵方法提取子表了。

    55、对于一个向量也可以使用table函数,将其转换为表。而tabdom(表, 个数)  表示找出表格中频数最高的几位。

    56、cut用于生成因子,cut(x, b, labels=FALSE)  表示x是数据向量。b是范围集合。产生结果:表示x的值落在哪个区间。这些数结果组成的向量。

     

     

     

    1、编程结构:

    1、循环:

    for(i in x)表示的意思是循环会对x向量中的每个元素进行一次迭代。i会取遍 x[1]  x[2]等

    R语言中没有分号,就是一行一个计算。但是有大括号。 也有while repeat break都可以使用。repeat{ i<i+4           if(i>10) break}

    当然有自己独特的next .用于类似continue,就是此次for循环next下面的后面的都不再执行重新下一次for循环。

    2、scan()函数中填入文件名。只能填入文件名字。

    3、但是很明显,R不支持非向量集合的循环,但是有些间接方法。例如lapply可以对每个列进行。

    get函数,get接受的参数是非向量集合组成的字符串参数,例如get(c("fei1","fei2"))

    4、if else即使只有一句话,也要写大括号,而且判断语句只能是逻辑值不能是逻辑向量!!!!

    5、标量的逻辑与 或     向量的逻辑与 或  是不同的,前者是双个&&,或者是单个。且结果前者是值后者是向量。

    6、返回值有多个的情况,可以将结果加在list中返回。

    7、t<-function(x) return (x^2)  

        return t

    这个返回值就是返回一个函数。。。所以返回值类型有好多的。

    8、函数都是对象。 而函数范围很广,{都可以看成函数,,作用是将几个句子组织成一个单元。函数定义的两个参数可以铜鼓formals()和body函数得到,第一个得到参数,第二个得到函数体。g<-function(x){}   那么就是formals(g)   body(g)

    9、当要查看的函数之类很长时候可以使用page(abline)使用页看。

    10、改变函数主体使用body(g)<-quote(2*x+3)如果少了quote这种带call性质的引用,那么就会出现g直接是一个值而不是一个函数。。

    11、ls()函数会打印出目前环境下所有的变量,对象。还有ls.str()表示目前环境下对象的详细内容。

    12、找函数的运行范围,是从近处开始,然后往外围上层找。

    13、print(ls (envir=parent.frame(n=1)))  表示为当前环境网上升一级。

    14、与c语言一样,函数不会修改非局部变量。总是拷贝一份然后执行。原来的并不改变。只有superassignment opertator这个超赋值运算符才可以。<<-  和assign()才能在局部变量处对非局部变量进行修改。但是<<-和assign只是标识要对调用上一层进行赋值并不是一定到最顶层!!!

    15、showframe()就是函数带一个参数,代表调试时候想看上几级的变量内容,里面数字是几就是往上几层的框架 数目。showframe()其实就是调用的parent.frame()这个函数,而且,ls(envir=env)表示指定特定的层次的调用。

    16、R中没有指针体现在x<-c(3,2,4)那么执行sort(x)后出现的是一个值但是并没有改变x的值,x仍然是原值,但是python就可以改变。。。只能重新给x赋值为:x<sort(x)   如果输出包含很多变量,那么怎么办呢?只能用list来做变量,然后传输list即可

    17、一个函数中定义f<-function(u){u<<-u*2}

    那么当x<-2  f(x)时候只是将x这个值传进去,当然计算的是u=4并不是x=4.所以不论传进去的是什么,都是一个值,不是一个变量!!!!!然后会在调用f的上层环境中多出一个u=4的值,而不是变量x。

    18、再次强调x[-1]出现负号表示的是将第几个值扔掉!!!!

    所以quicksort自己用R编程,当然可以直接用sort就是快排。

    qs<-function(x){

    if(length(x)<=1) return ( x)               注意同样是相等用==两个等号这种来判断!!!!

    19、是挺厉害的,可以自己定义类,然后类内部自己重新定义常规的"[."和"[<-"这两个操作。是"[.newclass"<-function(){}操作和 "[<-.newclass"<-function(){}。

    20、将自己的文本后缀是.R 的代码加入是:source(xxx.R)即可。  如果想单纯修改下已经在环境中的f1()函数,或许edit(f1)会单独有个框修改,不影响目前。或者想拷贝一份再修改,那么更要用edit为:f1<-edit(f2)即可。

    21、创建自己的二元运算符,例如:   "%a2b%"<-function(a,b) return (a+2*b)

    那么就可以使用:3  %a2b%  5 结果是:13

    22、f<-function(x) return(x+2)   这个过程是先定义一个函数,function定义的,然后把这个函数赋值给f,注意f叫做函数名,而return(x+2)并不是返回给f,而是将function(x) return(x+2)整个无名称函数给了f,这样自己使用时候用f(2)这样就是调用f函数名。而在apply函数中直接调用function(x) return(x+2)例如:apply(x, 1, function(x)return(x+2))就是匿名函数的用法。而apply(x, 1,f)就是非匿名函数的用法。因为apply的第三个参数必须是函数,所以使用匿名或者有名的都行。其实function(x) return (x+2)有没有return都一样的,因为仅仅一个表达式就能返回,自带返回函数。所以不带return就行,并且赋予f的是一个函数,并不是x+2而是整个函数形式。即function(x) x+2 才是完全的f.

     

    一、数学运算和模拟

    1、exp()是以e为底的指数函数。 log()自然对数。log10()以10为底的对数,sqrt()平方根函数  abs()绝对值。sin  cos

    min() max()  which.min()  which.max()表示最大最小的位置索引。pmax() pmin()比较所有等长向量中位置在k处的最大值或者最小值。sum()  prod()是求向量和和求向量积。cumsum() cumprod()表示对一个向量前k个元素进行求和和求积,是分别计算k从1到length(x)的方法.例如x向量有10个元素,那么给出10个结果。。round() floor() ceiling()分别是四舍五入, 向上取整,向下取整。 factorial()是阶乘。

    在求向量的最小最大值后,还有nlm()   optim()来得到函数的最小值和最大值。但是需要给函数先设定一个初始值,这样nlm或者optim才可以进行收敛得到。

    微分积分:

    derivative 和integrate()

    D(expression(exp(x^2)),"x")  表示是e的x^2次方进行对x进行求导。即表达式和求导对象

    integrate(function(x) x^2, 0, 1)  //默认是对x进行求积分。表示对x^2这个表达式进行从0到1的积分。

    上述两者区别是式子分别用expression和function表达。

     

    其中R的odesolve包提供处理微积分函数,而ryacas包提供了R与yacas符号系统的接口

    2、统计分布函数

    函数名有一套统一的前缀名字。

    d表示概率密度函数

    p对应累计分布函数

    q代表分布的分位数。

    r是随机数生成函数

    然后常规分布函数名称: norm()正态分布, chisq()卡方分布 , binom()二项分布

    上面的四个前缀都可以与这些分布函数名字随机组合

    模拟生成1000个自由度为2的卡方随机变量,再求其平均值

    mean(rchisq(1000,df=2))   

    这个rchisq表示从卡方随机分布中随机生成1000个数,这些带有前缀R打头的分布函数第一个参数是个数,后面就是自己所属的分布族自身带有的参数了。例如df是卡方分布的参数表示自由度。 

    想查询使用                    ?rchisq即可。

    3、sort()排序但是不改变原值。order()

    对数据框进行排序,是:order(list&one)然后将得到的位置当成行位置指导 list[order(list&one),]表示的就是以one列进行的排序方式将每一行重新排序。

    rank()还能得到每个元素的排序大小,表示按照从小到大在整个向量中处于第几位。而同样大小的,分列3,4位,那么结果就是分别排位值为3.5都是相等的。

    4、向量和矩阵的线性代数运算

    普通向量与标量相乘是*即可。但是如果想计算两个向量的内积。使用crossprod(x, y)函数即可。

    矩阵乘法是:%*%而不是*

    solve()函数求解线性方程,即将线性方程先用矩阵将其表示出来,然后solve(x,y) x表示等号左边。y表示右边值。而只加入一个参数的solve是用于求解矩阵的逆矩阵。

    关于矩阵的计算还有很多函数,但是自己已经忘记了好多。t() qr()  chol()  det()  eign()  diag()//该函数有两用性 sweep() 

    其中扩展的示例:向量的叉积。则很好。行列式是一个与矩阵类型相关的函数,所以说行列式是用一个复杂函数计算得到一个值的过程。记住三维的行列式计算就可以了。其实是个迭代的过程,-1的k次方再乘以子矩阵的行列式det(子行列式)

    只有方阵才有特征值,和特征向量,要不然不能匹配个数:特征空间包含所有的特征值。虽然说的是矩阵,但是核心是拉缩向量,但是特征值和特征向量就是从矩阵得到的,虽然叫矩阵的特征值特征向量其实这两个值就是为了总结矩阵的。

    Ax=入x  其中入是一个数值,x是一个向量,列类型,那么为了元素个数匹配,那么只能A为方阵与x相乘,然后得到一列值。

    矩阵乘以向量的作用就是对向量进行的一个拉伸或者扭转的结果。。是以向量为核心的,这才是矩阵的意义(例如矩阵乘以一个向量后变成另一个向量。)。而特征值和特征向量是找出能让该矩阵只拉伸的向量(就是特征向量),且其拉伸程度!!!!程度就是特征值,。一个矩阵的一组特征向量是一组正交向量(什么是正交向量),正交向量是指两两正交。而正交是向量相互垂直,判断方法是:

     

    向量的内积也叫点积意义是:正交是内积。不是叉积。正交表示两个向量垂直。

    向量的叉积:就是使用行列式方法的乘积。两个三维向量的叉积结果是新的三维向量

     

    5、集合运算。

    求并集union()  intersect表示交集。setdiff()表示差集,谁在前表示以谁为主,在前面参数中不在后面参数中。setequal(x,y) 检测集合x和y是否相等。

    c %in% y  不是函数,是判断元素c是否在y中,返回一个布尔变量结果。

    自己定义函数时候,长名字使用双引号添加!!!"长名字"<-

    combn()函数用于一个向量产生指定个数的所有向量集合,产生的结果是按列组成的矩阵。combn(1:3, 2)  也可以指定一个函数对于得出的子向量集合进行操作。combn(x, 2, sum)对每个结果进行求和。

    6、x<-rbinom(10000,5,0.5)即一个二项分布(n次独立实验),每次结果只有两种可能,并且产生的是x值是每5次结果中正面朝上的次数。。所以找到x向量中大于4的次数。求平均值就是硬币四次都是朝上的概率。函数生成的是随机变量结果集合。

    虽然好多概率可以用公式计算,但是R还可以模拟,做百万次模拟得到结果。这个很厉害的。

    一、类

    1、R中从数字,字符串,矩阵都是对象,是类的实例化。R支持封装(是把数据封装为一个类实例。),多态,继承。

    S3是原始的类结构。一个s3类是包含一个list并且有类名属性,和dispatch调度(调度功能使泛型函数成为可能)。什么是泛型函数?就是含有多态的函数都叫做泛型函数。

    例如print()函数。如果识别出来对象是lm类型类,那么调用的实际是print.lm()函数。

    unclass(函数)是表明,去除函数的类声明,显示出核心输出部分,手册看的更清晰一些。

    methods()里面放泛型函数可以显示出来真实包含的所有实现方法,例如print可以显示n多,print.acf* ....等。但是对于print.aspell*这种带星号的是不能显示出来的,即只能使用aspell让系统默认调用print.aspell但是如果自己显式调用的话,print.aspell会报错找不到,那么就只能使用getAnywhere(print.aspell)找到。

     

    读写:

    scan是只识别空白符号,而且只能识别为数字或者字符二选一。所以这些限制着不能读成数据框形式。

    read.table却是可以读成数据框形式,要变矩阵使用as.matrix变化。或者使用scan读成向量再把向量切割成matrix。

    read.table一定是可以根据空格和回车来识别文件。

    c<-file("1.txt","r")

    readLines(c, n=1)注意,是遇到EOF停止,但是可以读取空的行,并不会忽略空的行。

    close(c)表示关闭。

    人口普查,可以提取某个数据量组成数据框。很方便。

    提取字符串方法:substr(s, 起始数字,结束数字)然后再使用as.integer(sbustr())结果,表示是数值。

    都到这时候了list还不清楚?list(gender=c(1,2),age=c(15,16))然后names(list)

    1、还是要实践,例如矩阵,数据框类型就可以rbind  cbind等函数,而向量,list只能使用list$xx  <-数 或者 NULL   等函数。而且list的索引是数字或者[[加引号的名字]]  而由于向量是连续的!!!所以不能使用添加删除,只能 重造,c<-c(c[3:4],xxx,c[5:6])这种。

    所以制作数据时候,先定义数据类型再使用d<-data.frame()然后d<-rbind(d, listxxx)才行,只要保证list的个数是相同的即可。不能d<-rbind(list1,list2)这样不首先对d定义,得到的d没有作用。。因为list不能使用rbind.

    2、新建时候,list使用          l<-vector(mode="list", length=5)表明是5个长度的list。使用时候,for (i in 1:5)        list[[i]]<-socketconnection()

    同样,写入文件,使用数据框操作或者矩阵操作,就用write.table(data.frame, "文件名")即可,如果写入矩阵那么就是需要:人为去掉矩阵的行列的头。 write.table("data.frame", "wenjianming", row.names=FALSE, col.names=FALSE)   而且stringAsFactors=FALSE是大写波浪式的。

    writeLines(xxx, c)同样是内容和connection. 并且connection建立时候使用"w"然后使用close(c)关闭connection。

     

    对文件的操作:file.info()这种可以显示文件的大小,创建时间,是否为目录等。

    dir()返回一个字符向量。列出第一个参数指定目录下的所有文件名称。使用getwd就可以看见目录,然后加入dir中即可。如果里面加入recursive =TRUE那么就会出现整个目录树。

    不希望scan()输出读的个数加上quiet=TRUE.

    与网络连接同样需要使用socket连接。

     

    一、

    字符串操作:

    grep("pattern" , 向量) 返回的是向量中能匹配pattern的索引。  nchar("字符串")返回字符串长度,注意R字符串长度没有最后结束符。past是粘贴起来几个字符串。s<-sprintf("xxx%d is %d\n", i,i*2)这种是按照格式输出到s中。substr(x,  起始位置, 终结位置)。strsplit(x ,split="-")使用字符串中已有的-来分割。regexpr("pattern", text)返回pattern在text中的起始字符第一次匹配起始字符位置。而gregexpr()与regexpr很像是返回所有匹配字符开始位置,前者是只返回第一个起始字符位置。。

    grep("c.e","acxecue")像这样,只会将后面引号中当成一个向量元素,返回的也是一直是这个向量元素位置,有了就只能是1没有就是0。是以向量为单位的。

    grep("pattern", xxx)这种正则表达式使用方法,当pattern是[au]时候表示字符串中有a或者u的。  pattern  c.e其中.表示任意一个字符。c..e表示中间有两个任意字符。

    如果想查找.句号本身,那么使用"\\."因为反斜杠自身也是元字符属性。

    strsplit(向量,   "."  , fixed=TRUE)带上fixed=TRUE表示的是不把.当成正则表达式。看来正则表达式是默认生效不仅是在grep这个查找中生效。当然效果与使用 \\.是一样的。

    当然还有个问题:paste("a", "b")是有空格的所以如果使用paste产生名字变化的pdf文件,那么会出现空格,在paste中多用seq=""来控制无空格。

    另一种方法是使用sprintf()函数。只是注意,使用浮点类型时候,%g去掉了数值的多余的0.

    一、绘图

    最基本的plot

    plot(c(),c())表示的分别是x,y轴的值组成的点。这是最简单的圆点。开始逐步加入复杂的修饰。

    point character=pch 值表示不同的点形状。

    plot函数是分阶段执行的,所以可以加入坐标。plot(c(-3,3),c(-3,3),type="n", xlab="x", ylab="y")

    该命令只是添加坐标轴。必须xy轴坐标相同,并且这个type是n决定了不画点只画画布。这个自己写错了,是c(a,b)不是c(a:b)代表的是如果有type=n就是只画图的范围。这样就不会再提示不匹配了。当然无type=n是当成点的,并且n y x这些等号后面的值都要加双引号。

    添加线条:abline()  这个函数里面是一个线例如lm(y~x)结果。按道理abline()参数是截距和斜率。但是如果判断出来是回归线,那么会将回归线的斜率截距提取出画图的。一般abline会将结果加在目前的plot图中。

    lines()由于已经确定是直线,所以使用两个点向量参数(内部是x,y值)作为参数即可画出线。但是如果不想要点,只要线,那么加上type="1"

    目前只能在图上加线,但是一旦重新加点plot调用就更新画布了。。。。

    新增个窗口:windows()  x11()

    画两条线的确实是先用plot然后用lines。或者abline()此时需要注意先画范围比较广的图线,然后把小图加上,这样才不会超范围。

    有增加点的,!!!points(c(),c(), pch="+") 就是添加points,添加前两个指定向量对 的。

    使用text((x,y),"name")例如加标签,指定位置x,y然后加上名字。legend()加图片,可以输入quit来停止显示。

    locator(1)locator(2)分别可以显示出自己鼠标点的坐标点值。2表示可以得到两个点击的坐标值。并且不用复制,只用text(locator(1),"wenzi")这样点击就能填上文字。

    plot(c(-3,3),c(-2, 3))这个操作既画点也画坐标轴。自己的图发现已经不能再大了,所以需要定制图了。

    也说了,想撤销最好用source(.R)方法。

    定制方法:

    cex=1.5这个参数可以放在text或者plot任何画图的命令中当参数。。坐标轴更长同样在命令中使用参数:ylim=c(0,90000)表示起始范围。

    curve可以绘制函数中一段内容。在现有的图中想添加,那么使用curve的参数中加入add=T

    确实两次调用就显示颜色重了,但是自己想专门放大。怎么办?抄人家的源代码

     

    保存:dev.list()可以看到有几个设备。一般是一个画图的,一个标准命令的。然后显示dev.cur()看活动的是哪个。想保存谁,就dev.set(n)是设定激活目的窗口。然后dev.copy(n)就是将现在活的屏幕内容拷贝到括号内的设备中,然后关闭设备dev.off(n)关闭对应的才可以真正写入。

     

    三维图:persp ,wireframe() cloud().

     

    调试的时候,使用stopifnot(x>0) 与assert很像。print确实使人很烦,R包含了基本调试工具,确实,输入debug(hanshumingchneng)就出现了下次调用hanshumingcheng时候自动跳到browser这个debug环境中。还有一种是,不想函数开始就调试,而是函数大概位置,开始插入browse()这样,到了就debug,函数结束停止。两种调试方法。还有改进debug方法,就是因为每次debug完了还要undebug,很麻烦,使用debugonce()

    Q是退出,然后n是在browser下与gdb一个命令。c是退出循环或者到下一个暂停点,暂停点是browse位置。并且可以browser(x>0)表示大于0是才进入调试。还有一个即使 正在调试,不用退出加break而是setBreakpoint(x.R , 28)表示对哪个文件第28行加断点,此处加断点是进入browser模式调试的。。

    不想要断点了,就看在哪个函数中,然后untrace(那个函数)。

    当已经崩溃的时候,可以调用traceback()函数,然后看看卡死在哪。

    当有n与命令重复,那么使用print(n)来打印n的内容。

    使用save保存注意要输入save(xx, file="xx")  

    定义函数的时候不用加括号,只是调用的时候加上参数即可。

    注意每次edit编辑的时候前面一定要加上目的函数,然后最后将函数再次执行save,保存到文件中,因为edit是编辑的内存中的,编辑完并没有保存,只有赋值给自己定义的名称才有效!!!!!!!

     

     

     

    展开全文
  • R语言

    2020-10-10 20:45:29
    路径配置:包括工程位置和包的位置,亲测好用 ...depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFro
  • R语言︱逻辑运算

    万次阅读 2018-10-19 22:16:13
    R软件包含两个逻辑值,TRUE和FALSE。在其他编程语言中也称为布尔值(Boolean values)。布尔向量就是充满着逻辑值的逻辑向量。那么有如何的应用呢?     1、比较运算可以产生逻辑值  &gt;、&lt;、&...
  • R语言入门-安装R和Rstuido软件

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

    万次阅读 2017-10-07 17:17:40
    1.R的介绍 2.R的下载及安装 3.R的基础使用
  • R语言入门1---R语言介绍以及学前注意事项

    万次阅读 多人点赞 2019-10-17 15:09:55
    R语言是从贝尔实验室的S语言演变而来的,基于S语言开发的商业软件Splus,可以方便的编写函数、建立模型,具有良好的扩展性,取得了巨大成功。1995年由新西兰Auckland大学统计系的Robert Gentleman,Ross Ihaka,Bill...
  • R数据分析的基础命令

    2020-09-18 11:00:43
    第一次写博客简单介绍一些自己刚学习的R语言功能基本命令基本的数据类型数据类型的转换运算符代码展示 简单介绍一些自己刚学习的R语言功能 大三新学期学习一些新的R语言编程,首先要介绍一下R语言R语言是一种开源...
  • R语言笔记(一):R与Rstudio的安装(Windows)

    万次阅读 多人点赞 2016-04-20 20:14:15
    初学R语言,当然少不了这为编程设计的IDE:RStudio R的获取与安装 首先输入网址:cran.r-project.org——获取资源的网址 选择download R for Windows,下载下来安装即可(若是其他系统,按照要求安装即可,这里仅...
  • 在Mac系统上搭建R语言开发环境Rstudio

    万次阅读 2014-12-10 09:38:29
    Rstudio是目前非常流行的R语言开发IDE. 那么,如何在Mac OS X 环境下搭建RStudio开发环境呢? 去往 RStudio 官网下载最新的RStudio : 目前最新版本是 0.98.1091 ,我们下载第二个 For Mac OS X(10.6)+ 完成...
  • 利用Rstudio升级R语言版本

    万次阅读 2018-01-24 11:42:51
    install.packages("installr") library(installr) updateR()
  • R语言笔记2(有关于RStudio的代码保存事项)

    万次阅读 多人点赞 2018-09-20 13:51:58
  • Rstudio多个版本R语言环境进行选择

    万次阅读 2016-08-12 15:29:51
    当遇到安装的某个包与机器上的R语言版本不一致时,往往我们需要升级R语言,但是升级后又面临另一个问题,有的包可能在新版本没有完善,这个时候就需要旧版本的R,所以往往我们会在机器上安装多个版本的R环境,至少...
  • Rstudio安装——打开一片空白问题

    万次阅读 2016-06-29 18:12:33
    1、R语言安装指定为64位; 2、R语言Rstudio的安装路径不要有汉字; 3、R语言Rstudio的安装父目录要为同一个。 注意:如果不按照上面的操作,可能会出现Rstudio打不开的问题。
  • 1.升级R语言版本 第一步 install.packages(&amp;amp;amp;quot;installr&amp;amp;amp;quot;)#安装 第二步 library(installr)#加载 第三步 updateR()#升级 升级成功 接下来按照提示步骤,一步步安装...
1 2 3 4 5 ... 20
收藏数 631,917
精华内容 252,766
关键字:

r语言