短いバージョン:データ フレームに列名がないのは、属性「names」が NULL の場合のみです。したがって、データ フレームに列名が存在するかどうかを確認する簡単な方法は、次のようになります。
DFHasColNames <- function(x) {
stopifnot(is.data.frame(x))
Negate(is.null)(names(x))
}
DFHasColNames(mtcars)
# [1] TRUE
DFHasColNames(unname(mtcars))
# [1] FALSE
拡張バージョン:行名には、 を使用できます.row_names_info()
。デフォルトtype = 1L
では、マイナス記号は行名が自動的に生成されたことを示します。
.row_names_info(mtcars)
# [1] 32 # row names were provided
.row_names_info(iris)
# [1] -150 # row names were generated automatically
type
引数 を変更することで、他の情報を表示することもできます。
整数型。現在、type = 0 は内部の「row.names」属性 (NULL の可能性あり) を返し、type = 2 は属性によって暗示される行数を返し、type = 1 は後者を「自動」行名の負符号と共に返します。
.row_names_info(mtcars, type = 0)
## ... returns attr(mtcars, "row.names")
.row_names_info(iris, type = 0)
## [1] NA -150
列名については、それほど簡単ではありません。一般的に言えばNA
、列名またはnames(x)
戻り値のすべての値が表示される場合NULL
、の「names」属性がx
設定されx
ていないため、(列) 名がありません。
それ以外の場合、先頭に追加された aX
は通常、名前が から来たことを意味し、これはおよびなどでmake.names()
使用されます。data.frame()
read.table()
read.csv()
m <- matrix(1:6, 2)
make.names(seq_len(ncol(m)))
# [1] "X1" "X2" "X3"
data.frame(m)
# X1 X2 X3
# 1 1 3 5
# 2 2 4 6
一方、通常は先頭に追加さV
れますas.data.frame()
as.data.frame(m)
# V1 V2 V3
# 1 1 3 5
# 2 2 4 6
ただし、これはルールではありません。に渡すオブジェクトのクラスとas.data.frame()
、デフォルトの引数を変更したかどうかによって異なります。最善の方法は、多くのパターンをふるいにかけmethods(as.data.frame)
、パターンを発見できるかどうかを確認することです。