3.8 高维数组
在统计学领域,R语言中典型的矩阵用行表示不同的观测,比如不同的人,而用列表示不同变量,比如体重血压等,因此矩阵一般都是二维的数据结构。但是假如我们的数据采集自不同的时间,也就是每个人每个变量每个时刻记录一个数。时间就成为除了行和列之外的第三个维度。在R中,这样的数据称为数组(arrays)。
举个简单的例子,考虑学生和考试成绩的数据。假设每次考试分为两个部分,因此每次考试需要给每个学生记录两个分数。假设有两次考试,只有三个学生。第一次考试的数据是:
现在要把两次考试的成绩合并到一个数据结构里,命名为tests。tests共分为两个数据层(layer),一层对应一次考试,每层都是三行两列。firsttest在第一层,sedondtest在第二层。
第一层的三行对应于第一次考试的三个学生,每行的两列对应于考试的两个部分成绩。用array()函数创建这个数据结构:
参数dim=c(3,2,2) 指明数据共有两层(第二个2),每层分别有三行两列。这个参数最后会成为数组的dim属性。
tests中的每个元素现在都有三个下标,比矩阵多一个。这三个下标按顺序与$dim向量中的三个元素一一对应。例如,学生3在第一次考试的第二个部分中的得分如下:
print函数会逐层显示出数组的内容:
我们之前把两个矩阵合并成一个三维数组,同样,也可以把两个或更多个三维数组合并成四维的数组,以此类推。
数组的一个最常用的场合是表(table)的计算。参见6.3节中三维表的例子。