R语言数据类型3:Matrices and arrays如何创建并访问?

R语言数据类型3:Matrices and arrays如何创建并访问?

1.如何创建

矩阵是一个二维数组,每个元素都拥有相同的模式(数值型、字符型或逻辑型)。

1.1 matrix()

matrix(data = NA, nrow = 1, ncol = 1, byrow = FALSE,dimnames = NULL)#从给定的值集中创建一个矩阵
as.matrix(x, ...)#尝试将其参数转换为矩阵
is.matrix(x)#用于测试其参数是否为(严格)矩阵
  • data一个可选的数据向量(包括列表或 表达式向量)。非原子类的 R 对象通过as.vector 进行转换,并丢弃所有属性。
  • nrow所需行数
  • ncol所需列数
  • byrow逻辑值。如果 FALSE(默认值),则按列填充矩阵,否则按行填充矩阵。
  • dimnames 矩阵的 dimnames 属性: NULL 或一个长度为 2 的 list,分别给出行名和列名。空列表被视为 NULL,长度为 1 的列表被视为仅包含行名。
  • x一个 R 对象。

如果 nrowncol 中有一个未给出,将尝试根据 data 的长度和另一个参数推断它。如果两者都未给出,将返回一个单列矩阵。
如果 data 中的元素太少,无法填充矩阵,则 data 中的元素将被循环使用。如果 data 的长度为零,原子向量将使用适当类型的 NA(原始向量使用 0),列表将使用 NULL

1.2示例

x <- matrix(1:10, nrow=2, ncol=5,byrow=TRUE)
x
A matrix: 2 × 5 of type int
1234 5
678910

1.3array()

array(data = NA, dim = length(data), dimnames = NULL)
as.array(x, ...)
is.array(x)
  • data 一个向量(包括列表或 expression 向量)提供数据以填充数组。
  • dim 要创建数组的 dim 属性,即一个长度为一或更多的整数向量,给出每个维度中的最大索引。
  • dimnames 要么是 NULL,要么是维度的名称。这必须是一个列表(否则将被忽略),每个维度有一个组件,要么是 NULL,要么是一个长度由 dim 为该维度指定的字符向量。列表可以命名,并且列表名称将用作维度的名称。如果列表的维度数量少于维度的数量时,它将通过NULL 扩展到所需的长度。
  • x 一个 R 对象。

1.4示例

# 创建2x3x2三维数组(2行,3列,2层)
arr3d <- array(1:12, dim = c(2, 3, 2))
print(arr3d)
, , 1

     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6

, , 2

     [,1] [,2] [,3]
[1,]    7    9   11
[2,]    8   10   12
arr_named <- array(
  1:12,
  dim = c(2, 3, 2),
  dimnames = list(
    c("Row1", "Row2"),         # 行名
    c("Col1", "Col2", "Col3"),  # 列名
    c("LayerA", "LayerB")      # 第三维名称
  )
)
print(arr_named)
, , LayerA

     Col1 Col2 Col3
Row1    1    3    5
Row2    2    4    6

, , LayerB

     Col1 Col2 Col3
Row1    7    9   11
Row2    8   10   12

1.5 dim()获取或设置对象的维度

dim(x)
dim(x) <- value
  • x 一个 R 对象。
  • value 对于默认方法,可以是 NULL 或一个数值向量,该向量会被截断转换为整数。

1.6示例

x <- 1:24 ; dim(x) <- c(2,3,4)
print(x)
, , 1

     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6

, , 2

     [,1] [,2] [,3]
[1,]    7    9   11
[2,]    8   10   12

, , 3

     [,1] [,2] [,3]
[1,]   13   15   17
[2,]   14   16   18

, , 4

     [,1] [,2] [,3]
[1,]   19   21   23
[2,]   20   22   24

2.如何访问

2.1矩阵元素访问

  • 基本访问
mat <- matrix(1:6, nrow = 2, ncol = 3)
mat
# 访问第2行第3列
mat[2, 3] 
# 访问第1行
mat[1, ]    
# 访问第2列
mat[, 2]    
  • 多元素访问
# 访问第1行和第2行,第1列和第3列
mat[c(1,2), c(1,3)] 

# 访问所有奇数行(假设有更多行)
mat[seq(1, nrow(mat), by=2), ]
  • 使用逻辑索引
# 访问大于3的元素
mat[mat > 3]  # 返回向量 c(4,5,6)

# 访问第2列大于3的行
mat[mat[,2] > 3, ]  # 返回第2行
  • 通过行列名称访问
rownames(mat) <- c("A", "B")
colnames(mat) <- c("X", "Y", "Z")
mat["A", "Y"]  # 返回3
mat["B", c("X","Z")] # 返回c(2,6)

2.2数组(多维)的元素访问

  • 基本访问
arr <- array(1:24, dim = c(2, 3, 4))  # 2行3列4层
# 访问第1层
arr[, , 1]  
#      [,1] [,2] [,3]
# [1,]    1    3    5
# [2,]    2    4    6

# 访问第2行第3列第4层
arr[2, 3, 4]  # 返回24

# 访问所有层的第1行第2列
arr[1, 2, ]  # 返回向量 c(3, 9, 15, 21)
  • 子集访问
# 访问第2层和第3层的第1行
arr[1, , c(2,3)] 
#      [,1] [,2] [,3]
# [1,]    7    9   11
# [2,]   13   15   17

# 访问第1列的所有数据
arr[, 1, ]  
#      [,1] [,2] [,3] [,4]
# [1,]    1    7   13   19
# [2,]    2    8   14   20
  • 使用名称访问
dimnames(arr) <- list(
  c("R1","R2"), 
  c("C1","C2","C3"), 
  c("L1","L2","L3","L4")
)

arr["R1", "C2", "L3"]  # 返回15

2.3修改值

mat[2,3] <- 100  # 修改单个元素
arr[,1,] <- 0    # 修改所有层的第一列

参考资料:

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值