R 矩阵、列表和数组编程
介绍
处理数据是数据科学专业人员的一项明显要求。处理数据的基础包括了解最常见的数据结构及其相互关联的方式。在本指南中,您将学习在 R 中编程矩阵、列表和数组的技术。
向量
在继续之前,理解向量的概念非常重要。
向量是 R 中最常见的数据结构。它是相同基本类型的元素序列。vector ()函数可用于创建向量。默认模式是逻辑的,但我们可以使用character()、numeric()等构造函数来创建特定类型的向量。
下面的代码行分别构造一个数字向量和一个逻辑向量。向量还可以包含字符串,如向量s所示。
n <- c(1,2,5.3,6,-2,4)
l <- c(TRUE,TRUE,TRUE,FALSE,TRUE,FALSE)
s = c("USA", "UK", "AFRICA", "INDIA", "CHINA")
class(n)
class(l)
class(s)
输出:
1] "numeric"
[1] "logical"
[1] "character"
向量还可以进行多种运算,例如组合向量和执行数学运算。通过对向量的简要介绍,您可以理解矩阵、列表和数组。
矩阵
在 R 中,矩阵是数字或字符向量的扩展。矩阵中的所有列必须具有相同的模式和相同的长度。此外,与原子向量的情况一样,矩阵的元素必须具有相同的数据类型。矩阵的一般表示如下代码所示。
参数nrow和ncol分别表示行数和列数。参数byrow = TRUE表示矩阵应由行填充。
m = matrix(c(20, 45, 33, 19, 52, 37), nrow=2, ncol=3, byrow = TRUE)
print(m)
输出:
可以使用下标来标识矩阵的行、列或元素。例如,可以使用以下命令访问第二行和第二列的元素。
m[2, 2]
输出:
1] 52
您还可以创建一个矩阵,并使用dimname参数为行和列命名。在第一个矩阵m1中,元素按行顺序排列。在第二个矩阵m2中,按列排列。rownames和colnames指定矩阵的行名和列名。在创建矩阵m3时,所有这些参数都会传递给 matrix ()函数。
m1 <- matrix(c(21:32), nrow = 4, byrow = TRUE)
print(m1)
m2 <- matrix(c(21:32), nrow = 4, byrow = FALSE)
print(m2)
# Define the column and row names.
rownames = c("r1", "r2", "r3", "r4")
colnames = c("c1", "c2", "c3")
m3 <- matrix(c(21:32), nrow = 4, byrow = TRUE, dimnames = list(rownames, colnames))
print(m3)
输出:
您可以对矩阵进行编程,以使用行和列索引来访问元素。例如,下面的代码打印位于第三列和第一行的元素。
print(m3[1,3])
输出:
1] 23
如果您只想访问第二行,下面的代码将执行此任务。
print(m3[2,])
输出:
c1 c2 c3
24 25 26
矩阵可以进行数学运算。R 运算符可用于执行此任务,并且结果也是一个矩阵,前提是所涉及矩阵的行数和列数相同。
以下代码创建了两个2×3矩阵并执行加法运算。生成的矩阵名为combined,如下所示。
score1 <- matrix(c(5, 9, 0, -2, 7, 6), nrow = 2)
score2 <- matrix(c(5, 2, 5, 9, -1, 4), nrow = 2)
combined <- score1 + score2
print(combined)
输出:
以同样的方式,您可以对矩阵执行其他数学运算,如减法、乘法和除法。
列表
列表是包含对象(或组件)集合的通用向量。列表的优点是它允许您使用一个名称存储各种可能不相关的对象。
下面的代码行创建一个包含三个向量副本的列表:姓名、地点和年龄。
name = c("abhi", "ansh", "ajay")
place = c("delhi", "mumbai", "pune")
age = c(TRUE, FALSE, TRUE, FALSE, FALSE)
l = list(name, place, age)
print(l)
输出:
[1]]
[1] "abhi" "ansh" "ajay"
[[2]]
[1] "delhi" "mumbai" "pune"
[[3]]
[1] TRUE FALSE TRUE FALSE FALSE
您可以将多个列表合并为一个列表,如下所示。
l1 <- list(10,20,30)
l2 <- list("Jan","Feb","March")
merged <- c(l1,l2)
print(merged)
输出:
[1]]
[1] 10
[[2]]
[1] 20
[[3]]
[1] 30
[[4]]
[1] "Jan"
[[5]]
[1] "Feb"
[[6]]
[1] "March"
出于编程目的,您可能需要将列表转换为向量。这可以使用unlist()函数完成。这允许您执行数学运算。
l1 <- list(10,20,30)
l2 <- list(5,5,5)
v1 <- unlist(l1)
v2 <- unlist(l2)
print(v1)
print(v2)
addvec = v1 + v2
print(addvec)
输出:
1] 10 20 30
[1] 5 5 5
[1] 15 25 35
数组
数组表示可以存储二维以上数据的数据对象。使用array()函数可以创建数组。下面的代码行创建了一个数组r1,该数组以向量vec1和vec2作为输入。它还使用dim参数中的值来创建数组。
vec1 <- c(50,20,40)
vec2 <- c(10,20,25,30,35,50)
r1 <- array(c(vec1,vec2),dim = c(3,3,2))
print(r1)
输出:
, , 1
[,1] [,2] [,3]
[1,] 50 10 30
[2,] 20 20 35
[3,] 40 25 50
, , 2
[,1] [,2] [,3]
[1,] 50 10 30
[2,] 20 20 35
[3,] 40 25 50
dimnames参数可用于为数组中的行、列和矩阵命名,如下所示。
colnames <- c("column1","column2","column3")
rownames <- c("row1","row2","row3")
matrixnames <- c("matrix1","matrix2")
# Take these vectors as input to the array.
r2 <- array(c(vec1,vec2),dim = c(3,3,2),dimnames = list(rownames,colnames,
matrixnames))
print(r2)
输出:
, , matrix1
column1 column2 column3
row1 50 10 30
row2 20 20 35
row3 40 25 50
, , matrix2
column1 column2 column3
row1 50 10 30
row2 20 20 35
row3 40 25 50
编程和访问数组元素很容易。下面的代码打印数组第二个矩阵的第三行。
print(r2[3,,2])
输出:
column1 column2 column3
40 25 50
类似地,下面的代码打印第一个矩阵第一行第三列的元素。
print(r2[1,3,1])
输出:
1] 30
结论
免责声明:本内容来源于第三方作者授权、网友推荐或互联网整理,旨在为广大用户提供学习与参考之用。所有文本和图片版权归原创网站或作者本人所有,其观点并不代表本站立场。如有任何版权侵犯或转载不当之情况,请与我们取得联系,我们将尽快进行相关处理与修改。感谢您的理解与支持!
请先 登录后发表评论 ~