na

names属性 の R

1個の演習

names属性について

ベクトルには要素に名前を付けられます。名前を付けておくと、扱いやすくなることがあります。

作成

ベクトルに名前を付ける方法は3つあります。

  1. ベクトルを作成するときに付ける
> work_days <- c(Mon = TRUE, Tue = TRUE, Wed = TRUE, Thu = TRUE, Fri = TRUE, Sat = FALSE, Sun = FALSE)
> work_days
  Mon   Tue   Wed   Thu   Fri   Sat   Sun 
 TRUE  TRUE  TRUE  TRUE  TRUE FALSE FALSE 
  1. names()に文字列のベクトルを代入する
> months <- c(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
> names(months) <- month.abb
> months
Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec 
 31  28  31  30  31  30  31  31  30  31  30  31 
  1. setNames()を使う
> months <- c(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
> setNames(months, month.name)
  January  February     March     April       May      June      July    August September   October  November  December 
       31        28        31        30        31        30        31        31        30        31        30        31 

削除

名前が不要になったら、NULLを設定して削除できます。

> work_days
  Mon   Tue   Wed   Thu   Fri   Sat   Sun 
 TRUE  TRUE  TRUE  TRUE  TRUE FALSE FALSE 
> names(work_days) <- NULL
> work_days
[1]  TRUE  TRUE  TRUE  TRUE  TRUE FALSE FALSE

unname()関数を使っても同じ結果になります。こちらのほうが意図が伝わりやすいかもしれません。

名前を使った操作

names()関数は、名前を設定するだけでなく取得もできます。

> names(months) <- month.abb
> names(months)[1:3]
[1] "Jan" "Feb" "Mar"

位置を表すインデックスの代わりに名前を使うこともできます。この場合は、引用符で囲む必要があります。

> months[c("Jul", "Aug")]
Jul Aug 
 31  31 

このようなインデックス指定を正しく機能させるには、名前が重複しておらず、欠けてもいないことを確かめておくのがよいでしょう。ただし、Rは名前の重複をチェックしません。

通常のベクトル演算はそのまま使えます。名前を残すのが理にかなっている場合は、たいてい名前も保持されます。

> months[months == 30]
Apr Jun Sep Nov 
 30  30  30  30 

> sum(months)
[1] 365  # no meaningful names possible

より高度な話題

vectorsをはじめとする多くのRのオブジェクトには、任意の属性を付けることができます。names属性はその一例にすぎませんが、とくによく使われ、重要なものです。

実際のところ、名前はベクトルでは役に立つこともありますが、必須になることはほとんどありません。names-attribute属性は、listsやdataframesのようなより複雑な構造では、はるかに重要になります。これは今後のコンセプトで見ていきます。

GitHubで編集 リンクは新しいウィンドウまたはタブで開きます

names属性を学習する