R システムについて.
R システムの CRAN の URL: https://cran.r-project.org/
【サイト内の主な R 関連ページ】
内容: 関数,パッケージ,データのロード,データ型,オブジェクトの一覧, データ型の取得, オブジェクトの構造の取得 ,論理演算、比較演算、数値演算、文字列に関する演算など,ベクトルに関する演算子と関数,行列に関する演算子と関数,リストに関する演算子と関数,データフレームに関する演算子と関数,条件分岐と繰り返し,検定の概要,グラフの概要
【目次】
※ ヘルプの検索は「help.search() 」関数
data(iris)
data(lung)
data(iris) ?(iris)
主要なものを以下に挙げる
【要点】
ベクトルは,同じデータ型のデータの並び.変数 t に,要素 2, 1, 3 のベクトル(要素がこの順で並ぶ)を格納したいときは,
t <- c(2, 1, 3)
※ ベクトルは,数値以外も要素にできるが,すべての要素が同じ型でなければならないことに注意.
例: seq(2, 10, by = 1.5) ・・・ 初項2,公差1.5の等差数列で,10を超えない値まで.
例2: seq(2, 5, along = runif(8)) ・・・ 初項2,終項5の等差数列で,長さ8.
例3: seq(length=10, from=2, by=1) ・・・ 初項2,公差1の等差数列で,長さ10
例: rep(3, 5) ・・・ 要素「3」を5つもつベクトル
例: runif(10) ・・・ 区間(0,1)上の一様分布の乱数で,要素数10のベクトル
例: rnorm(10) ・・・ 平均0,分散1の正規分布の乱数で,要素数10のベクトル
V <- as.vector(L)
【要点】
変数 m に,要素 1, 2, 3, 4 が入った2行2列の行列,つまり,
1 3 2 4
を格納したいときは,次のように書く. nrow は行数.ncol は列数.
m <- matrix( c(1, 2, 3, 4, 5, 6), nrow = 2, ncol = 3 )
※ 行列は,数値以外も要素にできるが,すべての要素が同じ型でなければならないことに注意.
matrix() 関数では,要素が並んだベクトル,行数,列数を指定する.ベクトルの要素は,行列の1列目,2列目・・・という順で入っていく.
m <- matrix( c(1, 2, 3, 4), nrow = 2, ncol = 2 )
※ 「nrow=」,「ncol=」を省略することがよくある.
m2 <- matrix( c(1, 2, 3, 4), 2, 2 )
「byrow=TRUE」を付けると、 格納順が変わる。
m <- matrix( c(1, 2, 3, 4), byrow=TRUE, nrow = 2, ncol = 2 )
データフレームなどを行列に変換する関数. 例えば,データフレームの中身を行列とみなして,行列の掛け算を行いたい,というようなときには、行列に変換する。
m <- as.matrix(d)
データフレームなどを行列に変換する関数.
data.matrix() では文字列などは数値化される(下の実行例の通り)
m <- data.matrix(d)
【要点】
変数 L に,要素 "apple", 5, "fruits" リスト を格納したいときは,次のように書く.
L <- list("apple", 5, "fruits")
L <- list("apple", 5, "fruits")
【要点】
データフレームは,「同じ長さのベクトルを要素として持つリスト」とみなすことができる. 属性 type として 1, 2, 3, 4, 5, 6 が並び, 属性 name として "apple", "orange", "strawberry", "watermelon", "melon", "banana" が並び, 属性 price として 50, 20, 100, 150, 200, 100 が並ぶデータフレームは,
d <- data.frame( type = c(1:6), name = c("apple", "orange", "strawberry", "watermelon", "melon", "banana"), price = c(50, 20, 100, 150, 200, 100) )
d <- data.frame( type = c(1:6), name = c("apple", "orange", "strawberry", "watermelon", "melon", "banana"), price = c(50, 20, 100, 150, 200, 100) )
d <- as.data.frame(m)
a <- factor( c("apple", "orange", "banana") )
例1
各因子に固有の番号(通し番号)が得られる
L <- as.factor( c("1.2", "2.4", "2.1", "1.2") ) as.numeric(L)
例2
やはり、各因子に固有の番号(通し番号)が得られる. Species は "setosa", "versicolor", "virginica" の 3値のいずれかになるが、as.numeric の結果1,2,3が得られる
data(iris) attach(iris) class(iris) summary(iris) as.numeric (Species)
例3
as.character と組み合わせると、因子を文字列化したのちに数値に変換される.
L <- as.factor( c("1.2", "2.4", "2.1", "1.2") ) as.numeric( as.character(L) )
b <- ordered( c("apple", "orange", "banana") )
出来たテーブルは,因子などの値ごとの度数分布を表す
t <- table( c(1, 3, 2, 1, 4, 5, 4, 4, 2, 4) )
data(warpbreaks) table(warpbreaks$wool) table(warpbreaks$tension) table(warpbreaks$wool, warpbreaks$tension)
t <- table( cut( c(3, 15, 2, 8, 22, 18, 4), breaks=c(0,10,20,30) ) )
two-way contingency table を作る
data(warpbreaks) table( cut( warpbreaks$breaks, c(0,10,20,30,40,50,60,70) ), warpbreaks$wool )
data(warpbreaks) table( warpbreaks$wool, warpbreaks$tension == "L" )
アイテム集合や規則に関するデータマイニング用のトランザクションデータ
RGB3原色の色を,文字列として表す流儀があります.白は"#FFFFFFF", 黒は"#000000" というようにです.
灰色生成
引数は,red, green, blue, alpha (アルファ値), maxColorValue, names である. red, green, blue 以外は省略可能.
objects()
データ型の取得には、typeof() 関数や class() 関数を使う. ベクトルの場合には,要素の型が表示される(ベクトルは,同じ型のデータの並び,という決まりがあるので,それで困らない).
d <- data.frame( type = c(1:6), name = c("apple", "orange", "strawberry", "watermelon", "melon", "banana"), price = c(50, 20, 100, 150, 200, 100) ) typeof(d) class(d)
m <- matrix( c(1, 2, 3, 4, 5, 6), nrow=2, ncol=3 ) typeof(m) class(m)
その他
d <- data.frame( type = c(1:6), name = c("apple", "orange", "strawberry", "watermelon", "melon", "banana"), price = c(50, 20, 100, 150, 200, 100) ) str(d)
m <- matrix( c(1, 2, 3, 4, 5, 6), nrow=2, ncol=3 ) str(m)
【評価結果が論理オブジェクト】
論理和(引数がベクトルの場合,先頭要素のみを使っての論理和)
論理積(引数がベクトルの場合,先頭要素のみを使っての論理積)
【評価結果が論理オブジェクトのベクトル】
ベクトル化論理和
ベクトル化論理積
否定
【評価結果が論理オブジェクト】
ほとんど等しい(引数がベクトルの場合,先頭要素のみの比較)
【評価結果が論理オブジェクトのベクトル】
等しい
等しくない
より大
以上
より小
以下
和
差
積
割り算
べき乗
^の代わりに **と書いてもよい.
整数除算
剰余(割った余り)
平方根
絶対値
符号
順に,丸め,切捨て(x 以下の最大の整数),切り上げ(x 以上の最小の整数)
対数 (log() は底が e,log10() は底が 10,log2() は底が 2)
指数
三角関数と逆関数
paste( "hoge2", "hoge3", "hoge4" )
※ 長いベクトルの長さが,短いベクトルの長さの整数倍になっている必要がある.
整数のベクトルを指定する場合,指定された整数値を添え字とみなし,ベクトル内の整数値の順番どおりに要素が取り出され,新しいベクトルが生成される.
「-c(整数のベクトル)」は,整数のベクトル c(...) の前にマイナス「-」を付けたものである. この場合,指定された添え字以外の要素をすべて,元のベクトルの順序を保ったままで取り出す. 例えば,次のように書く.
x[-c(1,2}]
条件式に合致する要素だけからなるベクトルが得られる。
X = c(1, 3, 4, 6, 2, 7, 5) X sample(X, 3, replace=FALSE) sample(X, 3, replace=FALSE) sample(X, 3, replace=FALSE)
例
sum( c(1,2,3) )
![]()
![]()
出力はベクトルである.出力ベクトルの要素は,区間を表す因子である
V <- rnomr(20, 5) cut( V, c(0:10) )
重複を除去する
X = c(2, 1, 1, 3, 5, 2, 4, 4) unique(X)
重複があれば TRUE
X = c(2, 1, 1, 3, 5, 2, 4, 4) duplicated(X)
各要素が何個あるか
X = c(2, 1, 1, 3, 5, 2, 4, 4) rle(X)
V >- c(1, 2, 3) sapply(V, function(x) (x * 2))
x[i,j] のような書き方をすると,i 行 j 列という意味. x[i,] のような書き方をすると,i 行全体という意味. x[,j] のような書き方をすると,j 列全体という意味. x[,c(j,k)] のような書き方をすると,j 列と k 列を取り出して出来る2列の行列という意味.
数値要約として,最小,第一回分位点,中央値(median),平均,第三回分位点,最大が表示される.
m <- matrix( c(1, 2, 3, 4, 5, 6), nrow=2, ncol=3 ) summary(m)
「*」は行列にも使えるが,単に行列の要素同士の単純な掛け算になる. %*%は,行列どうしの行列積,行列とベクトルの積(このとき,ベクトルは,幅あるいは高さ1の行列とみなされる)を求める.
X <- matrix( runif(2000 * 2000), 2000, 2000 ) Y <- matrix( runif(2000 * 2000), 2000, 2000 ) Z = X %*% Y
「crossprod(c(2:4), c(1:3))」は「t(c(2:4)) %*% c(1:3)」に等しい.
install.packages("Matrix") library("Matrix") X <- matrix( runif(2000 * 2000), 2000, 2000 ) Z = lu( X )
X <- matrix( runif(2000 * 2000), 2000, 2000 ) Z = solve( X )
X <- matrix( runif(2000 * 2000), 2000, 2000 ) Z = det( X )
X <- matrix( runif(2000 * 2000), 2000, 2000 ) Z = svd( X )
X <- matrix( runif(2000 * 2000), 2000, 2000 ) Z = qr( X )
install.packages("Matrix") library("Matrix") X <- matrix( runif(2000 * 2000), 2000, 2000 ) Z = cov( X )
分散共分散行列の固有値と固有ベクトル(主成分分析)
install.packages("Matrix") library("Matrix") X <- matrix( runif(2000 * 2000), 2000, 2000 ) Z = eigen( cov( X ) )
install.packages("fftw") library("fftw") X <- matrix( runif(2000 * 2000), 2000, 2000 ) Z = fft( X )
library(relimp) d <- data.frame( type = c(1:6), m <- matrix( c(1, 2, 3, 4), nrow = 2, ncol = 2 ) showData(m)
m <- matrix( c(1, 2, 3, 4, 5, 6), nrow = 2, ncol = 3 ) apply(m, c(1,2), function(x) (x * 2))
apply による処理の繰り返し. <次元の指定>は
m <- matrix( c(1, 2, 3, 4, 5, 6), nrow = 2, ncol = 3 ) apply(m, 1, max) apply(m, 2, max)
下のように、「要素を2倍する」ような関数を扱うこともできる
m <- matrix( c(1, 2, 3, 4, 5, 6), nrow = 2, ncol = 3 ) apply(m, 1, function(x) (x * 2)) apply(m, 2, function(x) (x * 2))
m <- matrix( c(1, 2, 3, 4), nrow = 2, ncol = 2 ) edit(m)
「col = ...」の「...」には grey(), heat.colors(), topo.colors(), rainbow(), terrain() などを指定できる.
L >- list(1, 2, 3) lapply(L, function(x) (x * 2))
データフレームには,配列に使える演算子や関数の多くが,そのまま使える. データフレームに特有の関数は次の通り.
ベクトルが出力される.
d <- data.frame( type = c(1:6), name = c("apple", "orange", "strawberry", "watermelon", "melon", "banana"), price = c(50, 20, 100, 150, 200, 100) ) d$type d$name d$price
データフレームが出力される.
d[ "type" ] d[ c("type", "name") ]
条件式による選択を行いたい場合,subset の引数に条件式を書く.
subset( d, name == "apple" ) subset( d, price > 140 )
subset() と %in% の組み合わせを使う.
subset( d, name %in% c( "apple", "orange", "banana") )
d <- data.frame( type = c(1:6), name = c("apple", "orange", "strawberry", "watermelon", "melon", "banana"), price = c(50, 20, 100, 150, 200, 100) ) summary(d)
データフレームの転置を行う関数. 出力は,行列になる.
データフレームR のno列とデータフレームSのno列でのマージの例
d2 <- data.frame( no = c(1,2,3), name=("apple", "orange", "banana") ) d3 <- data.frame( no = c(1,2,3), color=("red", "orange", "yellow") ) merge(R, S, by.x="no", by.y="no")
データフレームd2のname列とデータフレームd3のname列でのマージの例
d2 <- data.frame( name = c("apple", "orange", "rose", "rose"), color = c("red", "orange", "red", "yellow"), price = c(50, 20, 300, 450) ) d3 <- data.frame( name = c("apple", "orange", "rose"), type = c("fruits", "fruits", "flower") ) merge(d2, d3, by.x="name", by.y="name")
d <- data.frame( type = c(1:6), size = c("M", "S", "M", "M", "L", "S"), price = c(120, 80, 110, 100, 200, 60) ) split(d, d$size)
apply による処理の繰り返し. apply は、データフレームにも使える. <次元の指定>は
d <- data.frame( type = c(1:6), name = c("apple", "orange", "strawberry", "watermelon", "melon", "banana"), price = c(50, 20, 100, 150, 200, 100) ) apply(d, 2, range)
d <- data.frame( type = c(1:6), size = c("M", "S", "M", "M", "L", "S"), price = c(120, 80, 110, 100, 200, 60) ) tapply(d$price, d$size, mean)
d <- data.frame( type = c(1:6), size = c("M", "S", "M", "M", "L", "S"), price = c(120, 80, 110, 100, 200, 60) ) by(d$price, d$size, mean)
data(warpbreaks) table(warpbreaks$wool) table(warpbreaks$tension) table(warpbreaks$wool, warpbreaks$tension)
library(relimp) d <- data.frame( type = c(1:6), name = c("apple", "orange", "strawberry", "watermelon", "melon", "banana"), price = c(50, 20, 100, 150, 200, 100) ) showData(d)
d <- data.frame( type = c(1:6), name = c("apple", "orange", "strawberry", "watermelon", "melon", "banana"), price = c(50, 20, 100, 150, 200, 100) ) edit(d)
主要なものを以下に挙げる
条件がベクトルの要素ごとに評価される.
plot( matrix( rnorm(100), 50, 2 ) )
data(iris) plot(iris, col=Species)
matplot( cbind( c(1,2,3,4), c(3,4,5,6) ) hist( as.matrix( iris["Petal.Length"] ) )
data(iris) hist( as.matrix( iris["Petal.Length"] ) )