Rの使いかた


保持している変数の表示,削除

  • 表示
ls()

[1] "A" "R" "S" "U" "V"

  • 削除
rm(A)
ls()の結果,
[1] "R" "S" "U" "V"  Aが削除されている.

連続して削除したい場合はrm(A,B,・・・)とコロンで区切る


ファイルからの読み出し,書き込み


  • 読み出し

Rを起動して,ファイルを指定する.

hensuu <- read.delim("samplefile.txt");

※ header=F とすると,
1行目に列名が書かれている場合はTを指定する.
1行目から値が書かれている場合にはFを指定する

 今回も hensuu <- read.delim("samplefile.txt",F); とした

readで読み込む.delimがTAB区切りで読み込む.

  • 書き込み

write.table(OBJECT ,"writefile.txt", row.names = F, col.names=F, quote=F)

指定されたオブジェクトをファイルへと書き出す.
その際,行列など上や左についている添字を表示させたくあい場合は,row.nameやcol.name=Fとしておく.また,全ての値に""が付かないようにquote=Fとする.


行列を扱うとき


R <-svd(X)
で特異値分解できる!

特異値分解が正しくできているかを確認する.
R$u %*% diag(R$d) %*% t(R$v);

それぞれ, R = USVtとなることから
R(m×n行列):
R$u m×l行列
diag(R$d) l×l行列で,特異値を対角行列とする単位行列
t(R$v) n×l行列となる転置行列

行数,列数の求めかた


x の行数(データ数)を求める.
nrow(x)

x の列数(項目数)を求める.
ncol(x)

  • 主に指定した行や列を削除していく方法(非推奨)

行列Aが存在し,消したい行(最終行,最終行-1)を指定する場合
A1 <- A[c(-(nrow(A)),-(nrow(A)-1)),, drop=F]

行列Aが存在し,消したい列(最終列,最終列-1)を指定する場合
A2 <- A[,c(-(ncol(A)),-(ncol(A)-1)),drop=F]


  • 主に指定した行をループ文のように指定する方法(推奨)

行列Aが存在し,1行目から行数−2行目までを取得する
A3 <- A[1:(nrow(A)-2),,drop=F]

行列Aが存在し,1列目から列数−1列目までを取得する
A4 <- A[,1:(ncol(A)-1),drop=F]


それぞれの列の名前の付け方

ベクトルbの1列目を名前に置き換える

rownames(b)<-b[,1]

1列目は名前なので削除する

b[,-1]


rankの求めかた


qr(X)$rank

QR分解を用いた方法である.
vd() を利用してsingular valueの数を数えても求まる。

Rにおける関数

  • 定義例
aa <- function(xx){
 xx*xx*xx;
}

実行例
aa(3)
[1] 27

  • 引数が代入されない場合の関数定義例
aa <- function(xx=1){
 xx*xx*xx;
}

実行例
aa(3)
[1] 27

aa()
[1] 1



クラスタリングアルゴリズム


#クラスター分析に必要なパッケージ
stats を読み込む
library(stats)

#データの読み込みから整形 #主成分分析の場合と同じ
dat <- read.delim( “ファイル名”)

rowvar <- matrix(dat[,1])

rownames(dat) <- rowvar

datclust <- as.matrix(dat [,-1])

#クラスター分析を実施
(ここでは,個体間の距離測定に,「標準化ユークリッド距離」,クラスター間の
#距離の定義には
「最長距離法(complete linkage method)」を使うこととする)
#「標準化ユークリッド距離」は「標準化したデータ」の個体間の「ユークリッド距離」を求めたもの。
#色彩語頻度表を標準化
(平均0,分散を1に変換)するためにscale()コマンドを使用している。
#データを標準化することで高頻度の色彩語が過大評価されたり
,低頻度語が過小評価されたりするのを防ぐ
#ことができる
results <- hclust(dist(scale(datclust), method=”euclidean”))

#結果をdendrogram
(樹状図)として表示

plot(results)



クラスタ数を指定する.


new1 <- new[28:53,] ある行からある行を抽出する.

hc <- hclust(dist(new1),method = "complete")
 完全リンク法を用いて,クラスタリングした結果をhcに保持する

cutree(hc,k=5)
 保持しているhcの各要素に対して,クラスタの数(k=5)を指定して各要素をグループわけする


文と単語の行列から単語の頻度を求める


行が文,列が単語となっている場合を仮定する

まず単語を行にもってきたいので転置して,単語ごとに行の総数を求める
(使われている単語の頻度を求める)
B <- t(A)

plot(rowSums(B),type="h")



文ごとのtf-idf単語頻度を合計して単語ごとにクラスタリング


単語のソート用に単語のインデックス用行列を作る(469×1行列)
x <- matrix(0:468,nrow=469,ncol=1)

SVDを用いた行圧縮ベクトルnewを生成する(列数の単語数は不変)
それを転置して置き換える
word <- t(new)

sumword <- rowSums(word)

s <- matrix(sumword,nrow=469,ncol=1)

x <- cbind(x,s)

x[order(x[,2]),] #2列目に対して全体を昇順にソートする


単語のクラスタリング


特定の行から行を抽出したベクトルをAとして,その転置行列をTとする
T <- t(A)
sumword <- rowSums(T)
s <- matrix(sumword,nrow= 469,ncol=1)
x <- matrix(0:468,nrow=469,ncol=1)
x <- cbind(x,s)
x[order(x[,2],decreasing = TRUE) ,] #1列目羽単語名,2列目は値,
#降順に表示



画像のプリント方法


results <- hclust(dist(scale(datclust),method="euclidean"))

plot(results)

png(filename = "cluster.png",width=500,height=500) #PNG形式で出力

plot(results) #出力したいオブジェクトをplot

dev.off() #デバイスを閉じます


最終更新:2007年11月16日 21:24