はじめに

最近, R 言語を学び始めた. データ型について整理してみた.

Atomic Classes of Objects

R には 5 つのアトミックなオブジェクトがある.

  • charactor
  • numeric (real number)
  • integer
  • complex
  • ligical (true/false)

Basic Objects

もっとも基本的なオブジェクトは vector.

vetor

c で vector を生成する.

a <- c (0.5, 0.6)    # numeric
b <- c (TRUE, FALSE) # logial
c <- 0:5             # integer     
d <- c ("a", "b", "c") #chalactor

型の混合も許す. tuple のような機能も併せ持つ.

a <- (1,7, "a")
b <- (TRUE, "a")
x <- 0:6
class (x)
integer

list

vector の特殊な形. 異なる型の vector を一つにまとめる.

x <- list (1, "a", TRUE, 1 + 4i)
x
1   a   TRUE    1+4i

Matrices

次元の性質をもつ vector. matrix 関数で生成.

m <- matrix (nrow = 2, ncol = 3)
m
nil nil nil
nil nil nil
m <- matrix (1:6, nrow = 2, ncol = 3)
m
1   3   5
2   4   6

dim

dim 関数をつかうと vector に 次元の性質を与えることができる.

m <- 1:10
dim (m) <- c (2,5)
m
1   3   5   7   9
2   4   6   8   10

cbind-ing and rbind-ing

cbind, rbind を利用しても, vector から matrix を生成できる.

x <- 1:3
y <- 10:12
cbind (x, y)
1  10
2  11
3  12
rbind (x,y)
1   2   3
10  11  12

Factors

vector の特殊なかたち. categorical data を扱う.

integer vector について, それぞれの integer に label があるようなもの.

enum 列挙型 ともいえる.factor 関数で作成.

x <- factor (c ("yes", "no", "no", "yes", "no"), labels = c ("yes", "no"))
table (x)
yes 3
no  2

Data Frame

list の特殊なかたち. list の list.

  • list のなかのすべての list が同じ length をもつ必要がある.

  • list の中の list は column とみなされる.

  • list の中の各要素の番号は row とみなされる.

  • 通常は, rad.table (), read.csv によって生成される.

  • data.matrix (x) によって matrix 型に変換できる.

x <- data.frame (foo = 1:4, bar = c (T,T,F,F))
1   TRUE
2   TRUE
3   FALSE
4   FALSE

names

オブジェクトには名前をつけることができる. 可読性を向上させる.

x <- 1:3
names (x) <- c ("foo", "bar", "norf")
x <- 1:3
names (x) <- c ("foo", "bar", "norf")

m <- matrix (1:4 nrow = 2, ncol = 2)
dimname (m) <- list (c ("a", "b"), c ("c", "d"))

Subsetting: 部分集合

サブセット (部分集合).

vector

x <- c ("a", "b", "c", "c", "d", "a")
x[1:4]
a
b
c
c

条件を指定して, 部分を抽出することができる.

x[x > "a"]
b
c
c
d

list

x <- list (foo = 1:4, bar = 0.6)

# index で指定
x[1]

# $で指定
x$bar

Marix

x <- matrix (1:6, 2, 3)
1   3   5
2   4   6

, を利用することで, 行や列だけを vector として抽出.

x[1,]
1
3
5

NA Values を取り除く

complete.cases で調べる.

x <- c (1, 2, NA, 4, NA, 5)
y <- c ("a", "b", NA, "d", NA, "f")
good <- complete.cases (x, y)
good
TRUE
TRUE
FALSE
TRUE
FALSE
TRUE
x[good]

Operations

vector

x <- 1:4, y <- 4:9
x + y
x * y
x / y
x <- matrix (1:4, 2, 2) 
1   3
2   4

matrix

y <- matrix (rep (10, 4), 2, 2)
10  10
10  10
x * y
10  30
20  40