R学习笔记 第二篇:矩阵、数组和列表
向量是一维的,只有行这一个维度,没有其他维度。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学习笔记 第二篇:矩阵、数组和列表的更多相关文章
- Android学习笔记(第二篇)View中的五大布局
PS:人不要低估自己的实力,但是也不能高估自己的能力.凡事谦为本... 学习内容: 1.用户界面View中的五大布局... i.首先介绍一下view的概念 view是什么呢?我们已经知道一个Act ...
- js学习笔记第二篇
Js笔记整理 1.StringAPI a) 大小写转换:str.toUpperCase();str.toLowerCase(); b) 获取指定位置字符: Str[i]-- ...
- java学习笔记(基础篇)—java数组
一:什么是数组,什么时候使用数组? 数组是用来保存一组数据类型相同的元素的有序集合,数组中的每个数据称为元素.有序集合可以按照顺序或者下标取数组中的元素. 在Java中,数组也是Java对象.数组中的 ...
- Node 之 Express 学习笔记 第二篇 Express 4x 骨架详解
周末,没事就来公司加班继续研究一下Express ,这也许也是单身狗的生活吧. 1.目录结构: bin, 存放启动项目的脚本文件 node_modules, 项目所有依赖的库,以及存放 package ...
- Asp.net core Identity + identity server + angular 学习笔记 (第二篇)
先纠正一下第一篇的的错误. 在 Login.cshtml 和 Login.cshtml.cs 里, 本来应该是 Register 我却写成 Login . cshtml 修改部分 <form a ...
- Vue.js学习笔记 第二篇 样式绑定
Class绑定的对象语法 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...
- Django学习笔记第二篇--关于请求获取
#细节都在代码段里面讲解 零.绪论: HTTP协议是一种请求响应的协议,一次请求一次响应.所以这部分的讲解将分为三个部分:请求获取,分析处理.返回响应. 一.获取请求数据: 1.POST和GET类型 ...
- ASP.NET Core 学习笔记 第二篇 依赖注入
前言 ASP.NET Core 应用在启动过程中会依赖各种组件提供服务,而这些组件会以接口的形式标准化,这些组件这就是我们所说的服务,ASP.NET Core框架建立在一个底层的依赖注入框架之上,它使 ...
- R学习笔记 ---- 系列文章
R实战 开篇:介绍R的使用 R学习笔记 第五篇:字符串操作 R学习笔记 第六篇:数据变换和清理 R学习笔记 第四篇:函数,分支和循环 R学习笔记 第三篇:数据框 R学习笔记 第二篇:矩阵.数组和列表 ...
随机推荐
- 201521123099 《Java程序设计》第13周学习总结
本周学习总结 书面作业 网络基础 1.1 比较ping www.baidu.com与ping cec.jmu.edu.cn,分析返回结果有何不同?为什么会有这样的不同? 1.2 telnet bbs. ...
- Markdown例子
一个例子: 例子开始 1. 本章学习总结 今天主要学习了三个知识点 封装 继承 多态 2. 书面作业 Q1. java HelloWorld命令中,HelloWorld这个参数是什么含义? 今天学了一 ...
- PHP字符串常用操作
常用操作有: PHP中有两个内建的函数:count() 和sizeof(),可以实现得到数组的长度 count($sttr);数组长度 字符串长度:strlen(string $a); 判断是否相同, ...
- [04] Cookie概念和基本使用
1.Cookie是什么 Cookie,中文名称为"小型文本文件"或"小甜饼",指某些网站为了辨别用户身份而储存在用户本地终端上的数据(通常经过加密). 很多网站 ...
- HIbernate实体类注解配置
一.类级别注解 1.@Entity(name="EntityName") 必须 name为可选,对应数据库中一的个表 2.@Table(name="",cata ...
- 匹配替换第n个字符串
var name = "questions[0][question]",i=0; name.replace(/\[.+?\]/g, function(match, pos, ori ...
- 用es6的class关键字定义一个类
es6新增class关键字使用方法详解. 通过class关键字,可以定义类.基本上,ES6的class可以看作只是一个语法糖,它的绝大部分功能,ES5都可以做到,新的class写法只是让对象原型的写法 ...
- HDFS概述(4)————HDFS权限
概述 Hadoop分布式文件系统(HDFS)的权限模型与POSIX模型的文件和目录权限模型一致.每个文件和目录与所有者和组相关联.该文件或目录将权限划分为所有者的权限,作为该组成员的其他用户的权限.以 ...
- Twitter的分布式系统中ID生成方法——Snowflake
Twitter-Snowflake算法产生的背景相当简单,为了满足Twitter每秒上万条消息的请求,每条消息都必须分配一条唯一的id,这些id还需要一些大致的顺序(方便客户端排序),并且在分布式系统 ...
- poj1067威佐夫博奕
取石子游戏 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 31490 Accepted: 10374 Descripti ...