LoginSignup
1
1

More than 5 years have passed since last update.

dimとdimnamesとnames(dim())とnames(dimnames())

Last updated at Posted at 2019-02-06

ある3×4の行列Aがあったとする。

A <- matrix(runif(3*4), 3, 4)

dimはこの行列のサイズを返す。

dim(A)
# [1] 3 4

dimnamesはこの行列の行名、列名を一度に設定する。

dimnames(A) <- list(
    X=paste0("x", 1:3),
    Y=paste0("y", 1:4))

これにより、dimnames(A)で、該当する情報が返ってくるようになる。

dimnames(A)
# $X
# [1] "x1" "x2" "x3"
#
# $Y
# [1] "y1" "y2" "y3" "y4"

後から部分的に、名前を変えることもできる。

dimnames(A)$X[1] <- "xx1"
dimnames(A)
# $X
# [1] "xx1" "x2"  "x3"
#
# $Y
# [1] "y1" "y2" "y3" "y4"

このXやYの部分のような、行・列全体に対する名前は、names(dimnames(A))でとってこれる。

names(dimnames(A))
# [1] "X" "Y"

ところで、このような名前を、dimのほうで登録しておくこともできる。
このような情報は、names(dimnames(A))とは別の箇所に記述されるらしい。
どちらか書き換えても、変更が連動したりもしない。

# 最初は何も書かれていない
names(dim(A))
# NULL

names(dim(A)) <- c("X", "Y")
dim(A)
# X Y
# 3 4
names(dim(A))
[1] "X" "Y"

あとから書き換えることも可能。

names(dim(A))[1] <- "J"
names(dim(A))
# [1] "J" "Y"

もっと高次元配列でも同様に考える。
例えば、3×4×5の3次元配列B(テンソル)があったとする。

B <- array(runif(3*4*5), dim=c(3,4,5))

dimはこのテンソルのサイズを返す。

dim(B)
# [1] 3 4 5

dimnamesはこのテンソルのオーダーごとの名前を一度に設定する。

dimnames(B) <- list(
    X=paste0("x", 1:3),
    Y=paste0("y", 1:4),
        Z=paste0("z", 1:5))

これにより、dimnames(B)で、該当する情報が返ってくるようになる。

dimnames(B)
# $X
# [1] "x1" "x2" "x3"
#
# $Y
# [1] "y1" "y2" "y3" "y4"
#
# $Z
# [1] "z1" "z2" "z3" "z4" "z5"

後から部分的に、名前を変えることもできる。

dimnames(B)$X[1] <- "xx1"
dimnames(B)
# $X
# [1] "xx1" "x2"  "x3"
#
# $Y
# [1] "y1" "y2" "y3" "y4"
#
# $Z
# [1] "z1" "z2" "z3" "z4" "z5"

このX、Y、Zのような、モード全体に対する名前は、names(dimnames(B))でとってこれる。

names(dimnames(B))
# [1] "X" "Y" "Z"

dimのほうでもモードの名前を登録しておくこともできる。
テンソルの場合でも、このような情報は、names(dimnames())とは別の箇所に記述されるらしい。

# 最初は何も書かれていない
names(dim(B))
# NULL

names(dim(B)) <- c("X", "Y", "Z")
dim(B)
# X Y Z
# 3 4 5
names(dim(B))
[1] "X" "Y" "Z"

あとから書き換えることも可能。

names(dim(B))[1] <- "J"
names(dim(B))
# [1] "J" "Y" "Z"
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1