行列から列を抽出するためのR構文があり、返されるベクトルに常にname属性がないかどうかを知りたいです(この動作に依存したいと思います)。
私の問題は、次の矛盾です。
- 行列に複数の行があり、そうすると、名前属性のない
myMatrix[, 1]
の最初の列が取得されます。myMatrix
これが私が欲しいものです。 - 行列に1行だけがあり、そうすると
myMatrix[, 1]
、の最初の列が取得さmyMatrix
れますが、名前として最初の列名があります。
名前のないものをmyMatrix[, 1]
一貫して手に入れたいです。
これを示す例:
# make a matrix with more than one row,
x <- matrix(1:2, nrow=2)
colnames(x) <- 'foo'
# foo
# [1,] 1
# [2,] 2
# extract first column. Note no 'foo' name is attached.
x[, 1]
# [1] 1 2
# now suppose x has just one row (and is a matrix)
x <- x[1, , drop=F]
# extract first column
x[, 1]
# foo # <-- we keep the name!!
# 1
さて、[
(?'['
)のドキュメントにはこの動作が記載されているので、バグなどではありません(ただし、なぜですか?!なぜこの不整合?!):
行列のインデックス付けによって取得されたベクトルは、結果の名前を提供するために行名(存在する場合)にインデックスが付けられるときに「x」が1次元でない限り、名前が付けられません。
私の質問はx[, 1]
、結果が 常に名前なしになるようにする方法はありx
ますか?行列はどこにありますか?
私の唯一の希望ですか、それともの議論unname(x[, 1])
に類似したものがありますか?または、「常に名前を付けない」と言うように設定できるオプションはありますか?私が使用できるいくつかのトリック(抽出された結果がベクトルである場合、どういうわけかの動作をオーバーライドしますか?)[
drop
[