R 是一门拥有统计分析及作图功能的免费软件,主要用于数学建模、统计计算、数据处理、可视化等方向。据 IEEE Spectrum发布的2016年编程语言前10位排名来看,R语言由2015年排名第6位上升级2016年的第5位。目前在CRAN 上发布的算法包已经超过8000+多个。R体系涉及到高等数据、概率学、统计学、IT技术等多种知识的综合应用,虽然看起来超级复杂,但学过程还是得从基础开始。

解释:CRAN (The Comprehensive R Archive NetWork): 提供下载软件安装程序和相应软件包的网站,访问地址:https://www.r-project.org/

附图2016年编程语言排名:来源于 http://spectrum.ieee.org/static/interactive-the-top-programming-languages-2016

 目录:

  • R语言特点
  • R语法规范
  • R工作原理
  • R数据类型
  • R对象类别
  • R对象判断转换
  • R运算符
  • R特殊值
  • R循环语句
  • R工作空间
  • R帮助
  • 常用操作

R语言特点:


  • 灵活、开放、免费
  • R是一种解释性语言
  • R区分大小写
  • 帮助系统很赞,开发查找方便
  • 数量众多的算法功能包(8000+扩展包),还不包括在github上的开发包
  • 支持在UNIX、 Windows and MacOS多种系统上运行
  • 高质量、广泛的统计分析、数据挖掘

R语法规范:


  • 对象的命名以"."或字母开头,当以"."开头时,第二个字符不允许是数字
  • 基本命令要么是表达式,要么是赋值。如果命令是表达式,它被解析后,结果显示在屏幕同时清空命令所占内存。赋值被解析后,将值传给变量结果不显示。
  • 命令以";"分隔或另起一行,注释以"#"标注
  • 当一条命令在一行结束时还没不完整,R会结出延续提示符,默认是"+"
  • 与其它语言相比,R有个比较个性的赋值表达方式(即箭头赋值符号),至于此表达方式的来源,在谢老师的一篇文章中有介绍,请参见http://yihui.name/cn/2012/09/equal-and-arrow/
  • 开发过程中的编码规范约定,可参见google的R语言编码风格指南,如下图(详细参见:http://bbs.pinggu.org/thread-1410518-1-1.html)

R工作原理:


  • 当R在运行时,所有的变量、数据、函数及结果都是以对象的形式存在于计算机的活动内存中,期间进行的所有操作都是针对活动内存中的对象,如下示意图
  • 用户通过输入一些命令调用函数,分析得出的结果可以直接显示在屏幕上,也可以直接存入某个对象或写入磁盘,因为产生的数据本身就是一种对象,所以它们也能被视为数据并能象其它数据一样被处理分析。数据的输入文件可来源于本地磁盘,也可以是从远程服务端获取
  • 上图中示意的所有的R 函数都包含在某个库里 (library), 我们从CRAN上下载的程序包被调用的时候,都要通过 library(包名)先加载到内存,再被使用,后面会详细介绍。
  • 在R软件安装包里自带的 base 库是R的核心,在启动R时会自动加载,它包含了如:数据读写、数据运算等基本操作。

R数据类型:


  • 数据型:Numeric
  • 字符型:Character
  • 逻辑型:Logical
  • 因子型:Factor   (表示不同类别,在下面的内容中会举例来说明)
  • 复数型:Complex

R对象类别:


  • 向量(Vector): 线性代数里面我记得又称为矢量,它表示一系统元素的组合。(注意:向量里面的元素类型必须一致,不一致时会自动进行转换),如下图示例
  • 因子(Factor): 为处理分类数据提供的一种有效方法,概念难懂,结合以下代码说明
    #取10名考生所在的省赋给变量province
    province <- c('四川','湖南','江苏','四川','四川','四川','湖南','江苏','湖南','江苏') #创建因子, 并查看因子输出结果
    pf <- factor(province);pf #录入每位考生的分数
    score <- c(95,86,84,92,84,79,86,99,85,90) #计算各省的平均成绩,并在屏幕显示
    tapply(score,pf,mean)
  • 输出结果如下图:(这样应该能明白了吧?)

  • 矩阵(matrix): 一种特殊的数组,是向量在多维度下的一般形式。 用法: matrix(data = NA, nrow = 1, ncol = 1, byrow = FALSE, dimnames = NULL)
    1. data为必要的矩阵元素,nrow 为行数,ncol 为列数,注意nrow 与ncol 的乘积应为 矩阵元素个数,byrow 项控制排列元素时是否按行进行,默认是按列,dimnames 给定行和列的名称
    2. 示例代码: 1:12表示 1至12 的有序数字序列
      > matrix(1:12,nrow = 3,ncol = 4,byrow = TRUE,dimnames = list(c("Row1","Row2","Row3"),c("col1","col2","col3","col4")))
      col1 col2 col3 col4
      Row1 1 2 3 4
      Row2 5 6 7 8
      Row3 9 10 11 12
      >
  • 数据框(dataframe): 和矩阵类似的结构,列可以是不同的对象。
    1. 使用data.frame函数来初始化一个对象,示例代码如下:

      > duty <-data.frame(date=c("","",""),
      + Name=c("tgzhu","zhangShan","LiShi"),
      + Tel=c("","",""))
      > duty
      date Name Tel
      1 20160814 tgzhu 13606401549
      2 2016015 zhangShan 13606401550
      3 2016016 LiShi 13606401551
      >
    2. 在通过读取本地文件、通过RODBC访问数据库访问的都是 data.frame对象,在后续会以单独的章节对其包含的操作进行介绍

  • 列表(list): 一种泛化的向量,没有要求所有元素数型一致
    1. 通过 list 函数来初始化一个对象,示例代码如下:

      #无tag 方式
      list("tgzhu",16,TRUE) #带tag方式
      list(name="tgzhu",workAge=16,goodMan=TRUE) #list 嵌套
      list(name="tgzhu",workAge=16,address=list(address="JN",Tel=""))
    2. list中元素的访问:list_name$tag_name、list_name[[tag_name]]、 list_name[[index]]

    3. 注意:list中元素的访问需要双层[[]],如果单层[index]或[tag_name]会访问到tag_name(或者index)与值本身,是个子list,而不仅仅是值;
    4. 双层[[]]中的只能是单一的tag_name或index,不能是类似[[1:3]]这样访问,而单层可以[1:3],提取出1~3作为子list
  • 小结:
    1. R中的数据结构主要面向《线性代数》中的一些概念,如向量、矩阵等
    2. R中其实没有简单数据(数值型、逻辑型、字符型等),对于简单类型会自动看做长度为1的向量

 R对象判断转换:

  • R对象判断函数:其返回值:TRUE或FALSE
    1. is.numeric(): 是否数值型数据
    2. is.character():   是否字符型数据
    3. is.vector():   是否向量数据
    4. is.matrix():  是否矩阵数据
    5. is.data.frame():   是否数据框数据
    6. is.factor():    是否因子数据
    7. is.logical():   是否逻辑型数据
  • 转换数据类型:函数将输入参数转换为对应的类型
    1. as.numeric()
    2. as.character()
    3. as.vector()
    4. as.matrix()
    5. as.data.frame()
    6. as.factor()
    7. as.logical()
    • 简单示例如下

      > a <- c(1,2,3);a
      [1] 1 2 3
      >
      > is.numeric(a)
      [1] TRUE
      >
      > a<-as.character(a);a
      [1] "" "" ""
      >
      > is.numeric(a)
      [1] FALSE

 R运算符:


  • 算术运算符: + - * /
  • 逻辑运算符: <,<=,>,>=,==,!=, &, |, !
  • 数学函数:log,exp,sin,cos,tan,sqrt,max ,min,range,length,sum,prod,var

R循环语句:


  • 条件语句:  if (expr1 ) expr2 else expr3
  • 循环控制:for,repeat,while
    1. for语法: for (name in expr1 ) expr2 其中name 是循环变量,expr1是一个向量表达式,而expr2常常是根据虚拟变量name 而设计的成组表达式。在name 访问expr1所有可以取到的值时,expr2都会运行
    2. 注意:相比其他程序语言,R代码里面很少使用for(),执行效率很低
    3. repeat expr, while (condition) expr
    4. 关键字break:可以用于结束任何循环,甚至是非常规的。它是结束repeat 循环的唯一办法。
    5. 关键字next:可以用来结束一次特定的循环,然后直接跳入"下一次"循环

R特殊值:


  • 在某些情况下,向量的元素可能有残缺.R为确保所有数据都能被正确识别、计算或统计等,定义了一些特殊值数据
    1. NULL:空数据
    2. NA(not available):表示无数据
    3. NaN(Not a Number):表示非数字
    4. inf:数字除以0得到的值,无穷大
  • 断一个object (x)是不是属于这些类型有相应的函数:
    1. is.null(x)
    2. is.na(x)
    3. is.nan(x)
    4. is.infinite(x)

R工作空间:


  • 工作空间(workspace)就是当前R的工作环境,它储存着所有用户定义的对象(向量、矩阵、函数、数据框、列表) 。在一个R会话结束时,你可以将当前工作空间保存到一个镜像中,并在下次启动R时自动载入它
  • 当前的工作目录(working directory)是R用来读取文件和保存结果的默认目录。使用函数getwd()来查看当前的工作目录,或使用函数setwd()设定当前的工作目录。
  • 注意:如果需要读入一个不在当前工作目录下的文件,则需在调用语句中写明完整的路径。记得使用引号闭合这些目录名和文件名
  • 用于管理工作空间的部分标准命令:
    1. getwd(): get working directory  显示当前的工作目录
    2. setwd("yourdirectory"):  修改当前的工作目录为你指定的目录地址
    3. ls():  列出当前工作空间中的对象
    4. rm(objectlist):  移除(删除)一个或多个对象,变通一下: rm(list=ls())  即表示删除工作空间内存中的所有对象
    5. rm(list=ls(pat=“^m”)): 删除内存中以m开头的变量
    6. options():  显示或设置当前选项,这个命令很有用,在下面的章节会用到
    7. save.image("myfile") : 保存工作空间到文件myfile中(默认值为.RData)
    8. save(objectlist, file="myfile"):  保存指定对象到一个文件中
    9. load("myfile"):  读取一个工作空间到当前会话中(默认值为.RData),一些静态的数据文件也可保存为.rda文件,通过load加载到内存
    10. q():  退出R

R帮助:


  • help.start(): 打开所有已在本地安装的帮助文档
  • help( 函数名) 或 ? 函数名 : 查看函数帮助文档
  • help.search(“pattern”) ??pattern:  函数搜索已在本地计算机安装的帮助文档
  • 如果有些包是最近才安装的,则设置rebuild参数来刷新数据库,如:help.search(‘tree’,rebuild=TRUE)
  • 示例:help(“bs”,try.all.package=TRUE) : 默认情况下,help只会在载入内存的包中进行搜索,选项 try.all.package = FASLSE,若设为TRUE,则可在所有包中进行搜索。在 这种情况下,不会显示函数 的帮助页面
  • 若package未载入内存,而想查看帮助页面,可使用:help(“bs”,package=“splines”);
  • apropos("yourSearchName"):找出所有名字中含有指定字符串的函数(仅加载到内存中的包中搜)

常用操作


  • 查看已加载的包:   (.packages())
  • 卸除已加载的包,如卸除RMySQL包:   detach("package:RMySQL")
  • 安装包,如下载安装报名为“rjson”的包:    install.packages("rjson")
  • 彻底删除已安装的包: remove. packages(c("pkg1","pkg2") , lib = file .path("path", "to", "library"))
  • 查看已安装的包:  installed.packages()[,c('Package','Version','LibPath')]  (其中c('Package','Version','LibPath') 表示显示包名、版本、库路径信息,若无[,c('Package','Version','LibPath')]参数,则显示所有信息)
  • 查看某个包提供的函数:  help(package='TSA')    (package参数为要查看的包的包名)
  • 查看某个函数属于哪个包: help(函数名)

R(一): R基础知识的更多相关文章

  1. R语言常用基础知识

    seq(from = 1, to = 1, by = ((to - from)/(length.out - 1)),     length.out = NULL, along.with = NULL, ...

  2. R语言常用基础知识(入门)

    data.frame 动态确定列名称 var <- "mpg" #Doesn't work mtcars$var #These both work, but note tha ...

  3. R语言语法基础二

    R语言语法基础二 重塑数据 增加行和列 # 创建向量 city = c("Tampa","Seattle","Hartford"," ...

  4. R语言语法基础一

    R语言语法基础一 Hello world #这里是注释 myString = "hello world" print(myString) [1] "hello world ...

  5. 学习 shell脚本之前的基础知识

    转载自:http://www.92csz.com/study/linux/12.htm  学习 shell脚本之前的基础知识 日常的linux系统管理工作中必不可少的就是shell脚本,如果不会写sh ...

  6. TCP/IP协议(二)tcp/ip基础知识

    今天凌晨时候看书,突然想到一个问题:怎样做到持续学习?然后得出这样一个结论:放弃不必要的社交,控制欲望,克服懒惰... 然后又有了新的问题:学习效率时高时低,状态不好怎么解决?这也是我最近在思考的问题 ...

  7. Linux基础知识整理

    一.基础知识 1.Linux简介 Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户.多任务.支持多线程和多CPU的操作系统.它能运行主要的UNIX工具软件 ...

  8. 图解TCP/IP→第2章基础知识

    ####TCP.IP背景**关键词:ARPANET,UNIX,分组交换技术,*ARPANET(阿帕网),也是全球互联网的鼻祖.阿帕网的成功也充分证明了基于分组交换技术的通信方法的可行性.*20世纪70 ...

  9. java基础知识小总结【转】

    java基础知识小总结 在一个独立的原始程序里,只能有一个 public 类,却可以有许多 non-public 类.此外,若是在一个 Java 程序中没有一个类是 public,那么该 Java 程 ...

随机推荐

  1. 转:服务器控件的 ID,ClientID,UniqueID 的区别

    动态加载用户控件的怪问题 动态加载用户控件的时候,会因为调用一些控件的一些属性和方法而造成控件命名混乱. 因为add 一个用户控件或者 loadcontrol 的时候 如果没有指定控件的id,clie ...

  2. lstm的debug模式下编译不行貌似

    待验证,因为也可能是 USE_CUDNN := 1被注释掉的原因

  3. 《JS高程》事件类型学习笔记

    事件类型: UI事件&焦点事件: 鼠标滚轮事件: 键盘与文本事件: 复合事件&变动事件: HTML5事件: 设备事件&触摸与手势事件:

  4. 大数据hadoop入门学习之集群环境搭建集合

    目录: 1.基本工作准备 1.虚拟机准备 2.java 虚拟机-jdk环境配置 3.ssh无密码登录 2.hadoop的安装与配置 3.hbase安装与配置(集成安装zookeeper) 4.zook ...

  5. mysql最大连接数

    通常,mysql的最大连接数默认是100, 最大可以达到16384.1.查看最大连接数:show variables like '%max_connections%';2.修改最大连接数方法一:修改配 ...

  6. C++ Primer : 第九章 : vector变长、string的其他操作以及容器适配器

    vector变长机制.string的其他构造方法,添加.替换和搜索操作,string比较和数值转换,最后是容器适配器. vector对象是如何增长的 vector和string类型提供了一些成员函数, ...

  7. 【渗透测试学习平台】 web for pentester -1.介绍与安装

    web for pentester是国外安全研究者开发的的一款渗透测试平台,通过该平台你可以了解到常见的Web漏洞检测技术. 官网:https://www.pentesterlab.com 下载地址: ...

  8. HDU 1061 Rightmost Digit --- 快速幂取模

    HDU 1061 题目大意:给定数字n(1<=n<=1,000,000,000),求n^n%10的结果 解题思路:首先n可以很大,直接累积n^n再求模肯定是不可取的, 因为会超出数据范围, ...

  9. Java—面向对象—权限修饰符及思维导图

    课上老师所讲实例整理: package org.hanqi.pn0120; //汽车 public class Car { //颜色 private String yanse; //品牌 privat ...

  10. POJ-2378 Tree Cutting

    题目大意:一棵n个节点的树,找出所有的点满足:删除它之后,产生的最大(这里节点数最多即为最大)新树中节点数不超n的一半. 题目分析:两次深搜,过程类似求重心. 代码如下: # include<i ...