向量是一维的,只有行这一个维度,没有其他维度。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. R语言学习笔记:矩阵与数组(array)

    元素可以保存在多个维度的对象中,数组存储的是多维数据元素,矩阵的是数组的特殊情况,它具有两维. 创建数组的几种方法. 1. > m<-c(45,23,66,77,33,44,56,12,7 ...

  2. R语言学习 第九篇:plyr包

    在数据分析中,整理数据的本质可以归纳为:对数据进行分割(Split),然后应用(Apply)某些处理函数,最后将结果重新组合(Combine)成所需的格式返回,简单描述为:Split - Apply ...

  3. R语言学习——向量,矩阵

    在R中,基本的数据结构有:向量,矩阵,数组,数据框,列表,因子,函数等. 向量:一系列同类型的有序元素构成. 向量是一维结构. 向量是R最简单的数据结构,在R中没有标量. 标量被看成1个元素的向量. ...

  4. R语言学习-基础篇

    从五月10日开始自学R in action,将我的学习所得逐渐发布在博客上. chapter1.新手上路 工作空间:存储着所有用户定义的对象(向量,矩阵,函数,数据框,列表): 当前的工目录保存是R用 ...

  5. R语言学习 第一篇:变量和向量

    R是向量化的语言,最突出的特点是对向量的运算不需要显式编写循环语句,它会自动地应用于向量的每一个元素.对象是R中存储数据的数据结构,存储在内存中,通过名称或符号访问.对象的名称由大小写字母.数字0-9 ...

  6. R语言学习-基础篇1

    ###第一周:R基础 rm(list = ls())  #ctr+L###矩阵相乘,函数diag()a=matrix(1:12,nrow=3,ncol=4)b=matrix(1:12,nrow=4,n ...

  7. R语言学习 第四篇:函数和流程控制

    变量用于临时存储数据,而函数用于操作数据,实现代码的重复使用.在R中,函数只是另一种数据类型的变量,可以被分配,操作,甚至把函数作为参数传递给其他函数.分支控制和循环控制,和通用编程语言的风格很相似, ...

  8. R语言编程艺术#02#矩阵(matrix)和数组(array)

    矩阵(matrix)是一种特殊的向量,包含两个附加的属性:行数和列数.所以矩阵也是和向量一样,有模式(数据类型)的概念.(但反过来,向量却不能看作是只有一列或一行的矩阵. 数组(array)是R里更一 ...

  9. Java并发包下锁学习第二篇Java并发基础框架-队列同步器介绍

    Java并发包下锁学习第二篇队列同步器 还记得在第一篇文章中,讲到的locks包下的类结果图吗?如下图: ​ 从图中,我们可以看到AbstractQueuedSynchronizer这个类很重要(在本 ...

随机推荐

  1. 安装并使用pt-ioprofile

    pt-ioprofile,是一个percona的性能分析工具,可以查看进程输出.输入,打印一些表文件及活动IO.pt-ioprofile是一个只读工具,所以对数据没风险.由于网上对pt-ioprofi ...

  2. oracle中insert 多条数据方法

    oracle中的insert 和 mysql添加多条数据的 方式不太一样 用到的语法: insert all into 表名(需要添加的表字段)values(添加的字段数据一定要对应字段顺序) int ...

  3. sysbench 多线程异步io模拟mysql测试的脚本

    用于测试的脚本: for size in 100 do cd /mnt/stec sysbench --test=fileio --file-num=1 --file-total-size=${siz ...

  4. 理解lua中 . : self

    前言 在LUA中,经常可以看到:. self,如果你学习过Java或C#语言,可以这样理解 .对于c#和java的静态方法 :相当于是实例方法 今天在CSDN上看到一篇博客写的很清楚,转载过来 原文出 ...

  5. Centos/Linux下调整分区大小(以home和根分区为例)

    转载于  https://blog.csdn.net/qq_33233768/article/details/65437609   在安装新系统的时候,有时候没法预估或者说错误的划分了分区大小,常常会 ...

  6. 【Linq】常用语法汇总

    语言继承查询(Language Integrated Query, LINQ),在C#编程语言中集成了查询语法,可以用相同的语法访问不同的数据源,LINQ提供了不同数据源的抽象层,所以可以使用相同语法 ...

  7. 在eclipse中方便的比较各个语言 资源文件—jinto的安装

    一.下载与安装jinto Eclipse插件的插件,用来解决资源文件的国际化问题 用jinto编辑器打开properties文件后,就可以方便的建立出各国和各种语言的资源文件,同时可以方便的对比书写各 ...

  8. Python学习(七)面向对象 ——继承和多态

    Python 类的继承和多态 Python 类的继承 在OOP(Object Oriented Programming)程序设计中,当我们定义一个class的时候,可以从某个现有的class 继承,新 ...

  9. Angular开发环境搭建和项目创建以及启动

    工具的安装 首先需要安装node,直接在官网下载node,然后一直下一步安装完即可,在安装node的时候自带了npm包管理工具 然后安装Angular CLI,使用npm命令安装输入以下命令 npm ...

  10. Cobalt Strike深入使用

    System Profiler使用 System Profiler 模块,搜集目标的各类机器信息(操作系统版本,浏览器版本等) Attacks->web drive-by->System ...