• このエントリーをはてなブックマークに追加

スポンサードリンク

はじめに

最近, 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
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