向量是一维的,只有行这一个维度,没有其他维度。R可以创建更高维度的数据对象,例如,矩阵、数据框、数组,索引高维度的对象时,需要使用元素的下标。这些对象的下标都使用中括号[]和索引,第一个维度是row,第二个维度是column,维度依次增加,索引的格式是:var[row,column,,,]。数组是二维或多维(三维或多于三维),二维数组叫做矩阵。数组元素的类型是相同的,每个维度的元素数量是相同的。数据框是二维对象,每个数据列的数据类型是相同的,不同数据列的数据类型可以不同。

一,数组(array)

R使用arrary()函数创建数组,该函数至少需要两个向量参数:数组的元素值(data)向量,和维度(dim)向量,第三个参数是可选的维度名(dimnames)向量。数据(data)参数是数组的所有元素值向量,维度参数(dim)指定各个维度的元素数量,维度名(dimnames)参数是可选的,用于指定各个维度的名称。

array(data = NA, dim = length(data), dimnames = NULL)

数组的维度是有顺序的,维度参数(dim)的第一个维度是row,第二个维度是column,第三个维度是high,以此类推,数组是按照维度的顺序把数据(data)参数的数据填充到数组中。

严格来说,数组(或矩阵)的长度和维度是固定的,因此不能增加或删除行或列,但可以通过为数组(或矩阵)重新赋值来实现行或列的增加或删除。

1,创建数组

示例:data=c(1:12),dim=c(2:3:2),这说明,数组共有:第一维是2行,第二维是3列,第三维是2项(item),参数dimnames为三个维度的row,column和itme命名。

> three_d_array=array(
+ data=c(:),
+ dim=c(,,),
+ dimnames=list(
+ c('r1','r2'),
+ c('c1','c2','c3'),
+ c('h1','h2')
+ )
+ )

打印的结果如下,其中“ , , h1”,表示第三维的第一个item,数组按照(1,1,1),(2,1,1),(1,2,1),,的顺序填充元素值。

, , h1
c1 c2 c3
r1
r2 , , h2
c1 c2 c3
r1
r2

2,数组的维度和长度

函数dim()返回数组的各个维度的长度,输出的结果按照维度的顺序依次显示:

> dim(three_d_array)
[]

特别地,函数nrow(),ncol(),用于返回数组的第一个维度,第二个维度的长度:

> nrow(three_d_array)
[]
> ncol(three_d_array)
[]

把函数nrow(),ncol(),dim()应用于向量时,将返回NULL值,R提供另外两个函数NROW(), NCOL(),用于返回数组、矩阵和数据框的第一个维度,第二个维度的长度,这两个函数把向量看作是一维的矩阵。

函数length(),用于返回数组的长度,是数组的各个维度的乘积:

> length(three_d_array)
[]

3,数组的维度的名称

数据和矩阵的每个维度都有名称,使用函数rownames(),colnames()查看数组、矩阵的各行的名称和各列的名称:

> rownames(three_d_array)
[] "r1" "r2"
> colnames(three_d_array)
[] "c1" "c2" "c3"

使用函数dimnames(x)查看对象的所有维度的名称:

> dimnames(three_d_array)
[[]]
[] "r1" "r2" [[]]
[] "c1" "c2" "c3" [[]]
[] "h1" "h2"

二,矩阵(matrix)

矩阵是二维数组的特例,本质上也是二维数组。使用函数matrix()创建矩阵,必须传递的参数是数据(data)向量,行数(nrow)或列数(ncol),可选的参数是dimnames参数和byrow参数。

matrix(data = NA, nrow = , ncol = , byrow = FALSE, dimnames = NULL)

byrow参数的默认值是FALSE,表示按照列填充矩阵,这意味着,R首先填充第一列的所有行,再填充第二列的所有行,以此类推:

> a_matrix=matrix(
+ data=c(:),
+ nrow=,
+ byrow=FALSE,
+ dimnames = list(
+ c('r1','r2'),
+ c('c1','c2','c3')
+ )
+ )

返回的结果如下,矩阵使用data参数,先填充位置(1,1),再填充位置(2,1),以此类推:

> a_matrix
c1 c2 c3
r1
r2

矩阵只有两个维度,行(row)和列(column),可以使用nrow,ncol,dim函数获得矩阵各个维度的长度,可以使用length函数获得矩阵的长度,即矩阵的元素总数量。

三,索引数组和矩阵

R使用中括号[]表示索引,有四种指定索引的方法(正整数,负整数,逻辑值和元素的名称),下标的整数值从1开始,正整数表示选择该项,负整数表示剔除该项。在不同的维度上用不同的方式指定索引下标,是有效的,每个维度的下标使用逗号分割。如果相应的维度上,下标为空,那么表示该维度的所有元素。索引矩阵和数组的方法相同,只不过矩阵的维度比数组的维度多一个。

1,使用下标索引数组

例如,索引数组,包含所有的行(row),第一个维度的下标是空;选择第二个维度的第1,2列,第二个维度的下标是向量c(1:2);选择第三维度的第一项(item),第三个维度的下标是1:

> three_d_array[,:,]
c1 c2
r1
r2

2,使用元素的名称索引数组

例如,索引数组,包含素有的行(row),第一个维度的下标是空;选择第二个维度的第1,2列,第二个维度的下标是向量c("c1","c2");选择第三个维度的第2个元素,第三个维度的下标是"h2"

> three_d_array[,c("c1","c2"),"h2"]
c1 c2
r1
r2

3,使用逻辑值所有数组

匹配操作符 %in%, 如果左侧的向量的元素能够匹配右侧的向量中的任意元素,那么返回TRUE,否则,返回FALSE。

> cols <- colnames(three_d_array) %in% c("c1","c2")
> cols
[] TRUE TRUE FALSE
> hs <- as.vector(dimnames(three_d_array)[[]]) %in% c("h1")
> hs
[] TRUE FALSE
> three_d_array[,cols,hs]
c1 c2
r1
r2

R学习笔记 第二篇:矩阵、数组和列表的更多相关文章

  1. Android学习笔记(第二篇)View中的五大布局

    PS:人不要低估自己的实力,但是也不能高估自己的能力.凡事谦为本... 学习内容: 1.用户界面View中的五大布局... i.首先介绍一下view的概念   view是什么呢?我们已经知道一个Act ...

  2. js学习笔记第二篇

    Js笔记整理 1.StringAPI a)        大小写转换:str.toUpperCase();str.toLowerCase(); b)        获取指定位置字符: Str[i]-- ...

  3. java学习笔记(基础篇)—java数组

    一:什么是数组,什么时候使用数组? 数组是用来保存一组数据类型相同的元素的有序集合,数组中的每个数据称为元素.有序集合可以按照顺序或者下标取数组中的元素. 在Java中,数组也是Java对象.数组中的 ...

  4. Node 之 Express 学习笔记 第二篇 Express 4x 骨架详解

    周末,没事就来公司加班继续研究一下Express ,这也许也是单身狗的生活吧. 1.目录结构: bin, 存放启动项目的脚本文件 node_modules, 项目所有依赖的库,以及存放 package ...

  5. Asp.net core Identity + identity server + angular 学习笔记 (第二篇)

    先纠正一下第一篇的的错误. 在 Login.cshtml 和 Login.cshtml.cs 里, 本来应该是 Register 我却写成 Login . cshtml 修改部分 <form a ...

  6. Vue.js学习笔记 第二篇 样式绑定

    Class绑定的对象语法 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...

  7. Django学习笔记第二篇--关于请求获取

    #细节都在代码段里面讲解 零.绪论: HTTP协议是一种请求响应的协议,一次请求一次响应.所以这部分的讲解将分为三个部分:请求获取,分析处理.返回响应. 一.获取请求数据: 1.POST和GET类型 ...

  8. ASP.NET Core 学习笔记 第二篇 依赖注入

    前言 ASP.NET Core 应用在启动过程中会依赖各种组件提供服务,而这些组件会以接口的形式标准化,这些组件这就是我们所说的服务,ASP.NET Core框架建立在一个底层的依赖注入框架之上,它使 ...

  9. R学习笔记 ---- 系列文章

    R实战 开篇:介绍R的使用 R学习笔记 第五篇:字符串操作 R学习笔记 第六篇:数据变换和清理 R学习笔记 第四篇:函数,分支和循环 R学习笔记 第三篇:数据框 R学习笔记 第二篇:矩阵.数组和列表 ...

随机推荐

  1. 201521123018 《Java程序设计》第13周学习总结

    1. 本章学习总结 2. 书面作业 一.1. 网络基础 1.1 比较ping www.baidu.com与ping cec.jmu.edu.cn,分析返回结果有何不同?为什么会有这样的不同? 返回时间 ...

  2. java数据类型与二进制

    在java中 Int 类型的变量占 4个字节 Long 类型的变量占8个字节 一个程序就是一个世界,变量是这个程序的基本单位. Java基本数据类型 1.        整数类型 2.        ...

  3. Servlet第一篇【介绍Servlet、HTTP协议、WEB目录结构、编写入门Servlet程序、Servlet生命周期】

    什么是Serlvet? Servlet其实就是一个遵循Servlet开发的java类.Serlvet是由服务器调用的,运行在服务器端. 为什么要用到Serlvet? 我们编写java程序想要在网上实现 ...

  4. [5] 微信公众号开发 - 微信支付功能开发(网页JSAPI调用)

    1.微信支付的流程 如下三张手机截图,我们在微信网页端看到的支付,表面上看到的是 "点击支付按钮 - 弹出支付框 - 支付成功后出现提示页面",实际上的核心处理过程是: 点击支付按 ...

  5. 最近使用 .NET Core 遇到的一些坑

    最近.NET Core升级到2.0后开始慢慢捣鼓的多了起来,但遇到了不少坑,所以特来记录下. 第一个坑  条件编译符 我们在编写一些方法的时候通常会为Debug模式增加一些输出日志等以便我们检查,也会 ...

  6. 图文详解在Windows server 2008 R2上安装SQL Server 2012集群

    1.准备: 4台服务器(1台AD.2台SQL服务器.1台iSCSI存储服务器) 9个IP(1个AD的IP.2个SQL服务器的IP.2个心跳IP.1个iSCSI存储服务器的IP.1个集群IP.1个DTC ...

  7. apriori关联规则

    挖掘数据集:贩物篮数据 频繁模式:频繁地出现在数据集中的模式,例如项集,子结构,子序列等 挖掘目标:频繁模式,频繁项集,关联规则等 关联规则:牛奶=>鸡蛋[支持度=2%,置信度=60%] ...

  8. global,local,static的区别

    1.在函数内部使用global关键字定义的变量可以成为全局变量,如果该变量已经被定义了,那么他的值就是原来的值,否则就是一个新的全局变量(一句话:已存在就不再创建): <?php $a=1; f ...

  9. pycharm 2017新建文件添加编码方式等

    file->setting->Editor->File and Code Templates->Python Script 添加 #!/usr/bin/python3# -*- ...

  10. java 面向对象 1

    目录 一.面向过程的思想和面向对象的思想 二.简单理解面向对象 三.面向对象的设计思想 四.对象和类的概念 五.如何抽象出一个类? 六.类(对象)之间的关系 七.Java与面向对象 八.为什么使用面向 ...