数组(array)是向量和矩阵的推广,是多维(三维或三维以上)数据。与向量和矩阵一样,数组的元素必须也是同一类型的数据。例如 - 如果我们创建一个维度(2,3,4)的数组,则会创建4个矩形矩阵,每个矩阵具有2行和3列。
在R中,一般用array()函数来创建数组。array()的原型为:
array(data = NA, dim = length(data), dimnames = NULL)
其中:data给定数组元素,默认情况下是NA;dim用来指定数组的维度,默认情况下是一维数组;dimnames设定各维度的名称,必须是个列表,默认情况下无名称。
例如创建一个由两个3x3矩阵组成的数组,每个矩阵具有3行和3列。
# Create two vectors of different lengths.
vector1 <- c(2,3,5)
vector2 <- c(7,8,9,11,11,12)
# Take these vectors as input to the array.
result <- array(c(vector1,vector2),dim = c(3,3,2))
print(result)
运行以上的代码,输出结果如下:
, , 1
[,1] [,2] [,3]
[1,] 2 7 11
[2,] 3 8 11
[3,] 5 9 12
, , 2
[,1] [,2] [,3]
[1,] 2 7 11
[2,] 3 8 11
[3,] 5 9 12
dimnames参数给数组中的行,列和矩阵命名。
# Create two vectors of different lengths.
vector1 <- c(2,3,5)
vector2 <- c(7,8,9,11,11,12)
column.names <- c("COL1","COL2","COL3")
row.names <- c("ROW1","ROW2","ROW3")
matrix.names <- c("Matrix1","Matrix2")
# Take these vectors as input to the array.
result <- array(c(vector1,vector2),dim = c(3,3,2),dimnames = list(row.names,column.names,matrix.names))
print(result)
运行以上的代码,输出结果如下:
, , Matrix1
COL1 COL2 COL3
ROW1 2 7 11
ROW2 3 8 11
ROW3 5 9 12
, , Matrix2
COL1 COL2 COL3
ROW1 2 7 11
ROW2 3 8 11
ROW3 5 9 12
有关如何访问数组元素,请参考以下代码实现 -
# Create two vectors of different lengths.
vector1 <- c(2,3,5)
vector2 <- c(7,8,9,11,11,12)
column.names <- c("COL1","COL2","COL3")
row.names <- c("ROW1","ROW2","ROW3")
matrix.names <- c("Matrix1","Matrix2")
# Take these vectors as input to the array.
result <- array(c(vector1,vector2),dim = c(3,3,2),dimnames = list(row.names,column.names, matrix.names))
# Print the third row of the second matrix of the array.
print(result[3,,2])
# Print the element in the 1st row and 3rd column of the 1st matrix.
print(result[1,3,1])
# Print the 2nd Matrix.
print(result[,,2])
运行以上的代码,输出结果如下:
COL1 COL2 COL3
5 9 12
[1] 11
COL1 COL2 COL3
ROW1 2 7 11
ROW2 3 8 11
ROW3 5 9 12
由于数组是由多个维度组成的矩阵,通过访问矩阵的元素来执行数组元素的相关操作。
# Create two vectors of different lengths.
vector1 <- c(2,3,5)
vector2 <- c(7,8,9,11,11,12)
# Take these vectors as input to the array.
array1 <- array(c(vector1,vector2),dim = c(3,3,2))
# Create two vectors of different lengths.
vector3 <- c(4,1,0)
vector4 <- c(6,0,7,3,13,3,2,8,9)
array2 <- array(c(vector1,vector2),dim = c(3,3,2))
# create matrices from these arrays.
matrix1 <- array1[,,2]
matrix2 <- array2[,,2]
# Add the matrices.
result <- matrix1+matrix2
print(result)
运行以上的代码,输出结果如下:
[,1] [,2] [,3]
[1,] 4 14 22
[2,] 6 16 22
[3,] 10 18 24
我们可以使用apply()函数对数组中的元素进行计算。语法
apply(x, margin, fun)
以下是使用的参数的描述 -
例子使用下面的apply()函数来计算所有矩阵中数组的行中的元素的总和。
# Create two vectors of different lengths.
vector1 <- c(2,3,5)
vector2 <- c(7,8,9,11,11,12)
# Take these vectors as input to the array.
new.array <- array(c(vector1,vector2),dim = c(3,3,2))
print(new.array)
# Use apply to calculate the sum of the rows across all the matrices.
result <- apply(new.array, c(1), sum)
print(result)
运行以上的代码,输出结果如下:
, , 1
[,1] [,2] [,3]
[1,] 2 7 11
[2,] 3 8 11
[3,] 5 9 12
, , 2
[,1] [,2] [,3]
[1,] 2 7 11
[2,] 3 8 11
[3,] 5 9 12
[1] 40 44 52
好了,今天先介绍到这里,祝大家周末愉快!
此外,我们在网易云课堂上有各种教学视频,有兴趣可以了解一下:
1. 文章越来越难发?是你没发现新思路,基因家族分析发2-4分文章简单快速,学习链接:基因家族分析实操课程
2. 转录组数据理解不深入?图表看不懂?点击链接学习深入解读数据结果文件,学习链接:转录组(有参)结果解读;转录组(无参)结果解读
3. 转录组数据深入挖掘技能-WGCNA,提升你的文章档次,学习链接:WGCNA-加权基因共表达网络分析
4. 转录组数据怎么挖掘?学习链接:转录组标准分析后的数据挖掘
6. 更多学习内容:linux、perl、R语言画图,更多免费课程请点击以下链接:
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!