R语言基础入门—数组

R语言

数组(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

[111

     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)

以下是使用的参数的描述 -

  • 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. 转录组数据怎么挖掘?学习链接:转录组标准分析后的数据挖掘

5. 微生物16S/ITS/18S分析原理及结果解读

6. 更多学习内容:linux、perl、R语言画图,更多免费课程请点击以下链接:

https://study.omicsclass.com/


  • 发表于 2021-04-30 16:02
  • 阅读 ( 2155 )
  • 分类:R

0 条评论

请先 登录 后评论
安生水
安生水

350 篇文章

作家榜 »

  1. omicsgene 702 文章
  2. 安生水 350 文章
  3. Daitoue 167 文章
  4. 生物女学霸 120 文章
  5. xun 82 文章
  6. 红橙子 78 文章
  7. rzx 76 文章
  8. CORNERSTONE 72 文章