R语言多维数组dimnames设置:能否为各子矩阵设不同行名?
给R语言三维数组的各子矩阵设置不同行名
Great question! 其实完全可以给三维数组的每个子矩阵设置独立的行名——只不过直接用dimnames参数是做不到的,因为它要求每个维度的名称是全局统一的向量。不过我们可以换个方式,手动给每个切片(也就是你说的子矩阵)单独配置行名,下面是具体的实现方法:
步骤1:先创建基础数组
先不通过dimnames预设名称,先创建一个空的3×3×3数组:
X <- array(0, dim = c(3, 3, 3))
步骤2:为每个子矩阵单独设置行名
你可以逐个给每个切片设置行名,比如第一个切片用c("x", "y", "z"),第二个用c("p", "q", "r"),第三个用c("m", "n", "o"):
# 设置第一个子矩阵的行名 rownames(X[, , 1]) <- c("x", "y", "z") # 设置第二个子矩阵的行名 rownames(X[, , 2]) <- c("p", "q", "r") # 设置第三个子矩阵的行名 rownames(X[, , 3]) <- c("m", "n", "o")
如果你的数组维度更大,用循环会更高效:
# 先准备好每个切片对应的行名列表 row_name_list <- list( c("x", "y", "z"), c("p", "q", "r"), c("m", "n", "o") ) # 循环遍历每个切片,设置行名 for(i in 1:dim(X)[3]){ rownames(X[, , i]) <- row_name_list[[i]] }
步骤3:验证结果
你可以查看每个子矩阵的行名,确认是否设置成功:
# 查看第一个子矩阵的行名 rownames(X[, , 1]) # 输出: "x" "y" "z" # 查看第二个子矩阵的行名 rownames(X[, , 2]) # 输出: "p" "q" "r"
额外补充:自定义列名
如果需要给每个子矩阵设置不同的列名,方法是完全一样的,只需要把rownames换成colnames即可:
colnames(X[, , 1]) <- c("Col1", "Col2", "Col3") colnames(X[, , 2]) <- c("C1", "C2", "C3")
内容的提问来源于stack exchange,提问作者iamigham
相关产品推荐
相关产品推荐

