日々のつれづれ

不惑をむかえ戸惑いを隠せない男性の独り言

vector関数

オブジェクト指向」=「数値計算でたくさん文字を書くかわりに、英数字を使って計算をするための便利技術」と書いた。
つまり、文字と数値からなるオブジェクトは文字や数値が格納されている入れ物です。
だから、

  • 数値を格納したオブジェクトはこうでした
> x <- 1:5
> x
[1] 1 2 3 4 5
#xには1から5までの数値が入っている
> length(x)
[1] 5
#そして、オブジェクトの長さを返すlength関数を使うと、入れ物の大きさが分かる。つまり、5個の入れ物がある。
  • オブジェクトの入れ物の指定は一重のブラケット([])で指定すればいい
> x[1]
[1] 1
> x[3]
[1] 3
#で、1つ目の入れ物には1があり、3つめには3が入っている。
> x[c(1,3)]
[1] 1 3
#2つ以上指定するときは、ブラケットの中にその場所をそれぞれ書けばいい。c('1つ目の指定','2つ目の指定',...)とする。指定の間はコンマ(,)で区切る
  • オブジェクトには数値だけでなく、文字も入る
> y <- c("A","b","C","DD")
> y
[1] "A"  "b"  "C"  "DD"
> y[1:2]
[1] "A" "b"
> y[c(4,1)]
[1] "DD" "A" 

で、このxやyはvectorというオブジェクトになります。名前の通り、一次元の情報を持っています。
で、オブジェクトの属性はis関数で分かる。

> is(x)
[1] "integer"             "numeric"             "vector"             
[4] "data.frameRowLabels"
#xは数値ベクトルで整数
> is(y)
[1] "character"           "vector"              "data.frameRowLabels"
[4] "SuperClassMethod"   
#yは文字ベクトル
> is.vector(x)
[1] TRUE
> is.numeric(x)
[1] TRUE
> is.integer(x)
[1] TRUE
> is.character(x)
[1] FALSE
> is.character(y)
[1] TRUE
  • でも、数値と文字は同じオブジェクトに入らない
> z <- c(1,5,"A",3,"aa")
> z
[1] "1"  "5"  "A"  "3"  "aa"
#一見、入ったように見えるが、実は全部文字になっている。
> is(z)
[1] "character"           "vector"              "data.frameRowLabels"
[4] "SuperClassMethod"   
> is.character(z)
[1] TRUE
#文字ベクトルになっている
  • あと、オブジェクトの各要素にはにはnames関数でラベル(?)を付与できる
> names(x) <- c("No1","No2","No3","No4","No4")
> x
No1 No2 No3 No4 No4 
  1   2   3   4   5 
> str(x)
 Named int [1:5] 1 2 3 4 5
 - attr(*, "names")= chr [1:5] "No1" "No2" "No3" "No4" ...

こうすると、こんな使い方もできる。

> x[1]
No1 
  1 
> x["No1"]
No1 
  1 
> x[c(3,4)]
No3 No4 
  3   4 
> x[c("No3","No4")]
No3 No4 
  3   4 

座標でした方が便利か、ラベルでした方が便利か、それは使い方次第。
機会があれば、その辺もまとめたいなぁ。