それでは、mdatという行列があり、インデックス番号しかわからないとしましょう。列と行の名前を取得するにはどうすればよいですか?例えば:
> mdat <- matrix(c(1,2,3, 11,12,13), nrow = 2, ncol=3, byrow=TRUE,
dimnames = list(c("row1", "row2"), c("C.1", "C.2", "C.3")))
> mdat[4]
[1] 12
> names(mdat[4])
NULL
> colnames(mdat[4])
NULL
> rownames(mdat[4])
NULL
> dimnames(mdat[4])
NULL
最初に、arrayInd
を使用してそのインデックスの行と列を取得する必要があります。
k <- arrayInd(4, dim(mdat))
次に、行と列の名前の要素を取得することにより、正しい名前を取得できます
rownames(mdat)[k[,1]]
colnames(mdat)[k[,2]]
または、両方を同時にmapply
を使用して:
mapply(`[[`, dimnames(mdat), k)
質問に示されているように、最初に行列をサブセット化すると、名前のない1要素ベクトルになります。サブセット化すると、コピーによって完全に新しいオブジェクトが作成されることに注意してください。サブセット化した後、元のmdat
を参照する方法はありません。
これは、サブセット化の結果を別のオブジェクトに割り当てると、より明確になります。
> m <- mdat[4]
> m
[1] 12
> names(m) # no names were printed above... so
NULL
あなたは本当に最初に列/行名にアクセスしてサブセットthemにアクセスしたいのです。
> colnames(mdat)[3]
[1] "C.3"
> rownames(mdat)[2]
[1] "row2"
同様に、列/行の名前を再割り当てできます。
> colnames(mdat)[3] <- "C3"
> rownames(mdat)[2] <- "row.2"
> mdat
C.1 C.2 C3
row1 1 2 3
row.2 11 12 13