R-Tips
Tinn-R
R小技 ベクトルの生成テクニック,ベクトルの操作,リストの操作,並べ替え,ランダム抽出
R拡張 Rcpp
Rplot プロット
型と型変換
型を調べる
> class( x )
種々の変換
> as.matrix( data ) # 行列に変換
> as.numeric( data[,1] ) # 数ベクトルに変換
numeric 数ベクトル
integer : 整数ベクトル
matrix : 行列
logical : 論理ベクトル
character : 文字列
for文で規則的に生成
初期化に注目
> vec <- NULL
> for(x in X)
> vec <- c(vec, f(x))
基本操作
行列の積
> A %*% B
c( ... )は行ベクトルとも列ベクトルとも分からない!
心配なときは,
> as.matrix(x)
とやると列ベクトルとして扱われる。
制御文
if-else 文
> if (a < 0) {
> print(0)
> } else if (a < 1) {
> print(1)
> } else print(2)
for 文
> x <- c( 1,3,5 )
> for (i in x){
> print(i)
> }
> for(i in 1:5) print(i^2)
3項演算子みたいなやつ
> u <- ifelse( condition, true, false )
関数定義
Rjp-wikiが参考になる。
基本形式
> 関数名 <- function( 引数 ){
> 関数定義
> }
Ex.1
> f <- function( x, y ){
> x+y
> }
Ex.2
> f <- function( x ) x^2
関数内部からグローバル変数に書き込み
<<- を使えば良い。
> write <- function( local ){
> global <<- local
> }
データフレーム
I/O
> df <- read.table("data.frame")
> write.table(df, "data.frame")
因子ベクトル
文字列でも数値でもない。クラスを保持する?
Levelsを出してくれるのはこれ。
数値演算ができない。
> str( df ) とか is.factor() で調べることができる。
csvから読み込み
> csv <- read.csv("hoge.csv")
csvが変なNA表記を用いてるために数値データが因子になってしまう
こんな感じになったら因子ベクトルになってしまっている。
> data[1:10,name]
[1] 998.4480083 998.4480083 1006.207967 1006.207967 #N/A #N/A
[7] #N/A 996.8960166 996.8960166 996.8960166 990.1707191
161 Levels: #N/A 1000 1000.517331 1001.034661 1001.551992 ... 999.4826694
→ as.is=TRUEを使うと、因子Factorオブジェクトではなく文字列Chrオブジェクトで止めてくれる。
> df <- read.csv("hoge.csv", as.is=TRUE)
> data[1:10,name]
[1] "998.4480083" "998.4480083" "1006.207967" "1006.207967" "#N/A"
[6] "#N/A" "#N/A" "996.8960166" "996.8960166" "996.8960166"
[11] "990.1707191"
これを加工することで、欠損値ありの数値オブジェクトになる。
> data[which(data$name == "#N/A"), name] <- NA
> data[,name] <- as.numeric( data[,name] )
ファイル操作
Rのソースの読み込み
> source( xxx.r )
作業ディレクトリの変更・確認
> setwd("C:/Scripts/R")
> getwd()
行列の書き出し
> write(t(x), "filename", ncolumn=ncol(x)) # 書き出しは転置してから行う!
> x <- read.table("filename") # 読み込みはファイルに書いてあるそのままが読み込まれる。
> x <- as.matrix( x ) # 行列に変換
注. 書き出しは転置して行う
つぎのように転置しないで書き出すと,
> write( x, file="hoge", ncol=ncol(x) )
> y <- read.table( "hoge" )
読み込んだyはxの転置になってしまっている!
> y == t(x)
1. as.matrix( vector ) は列詰め。Blas/Fortran方式。GSL/Cとは逆!!!
1↓↓↓
↓↓↓
↓↓↓9
2. write( matrix, ... ) はなぜか行詰めで書き出す。
1→→→
→→→
→→→9
3. read.table( ... ) はテキストで表示されている通りに読み込む。
1→→→
→→→
→→→9
データを読み込む その1( numeric として取り込み )
> data <- scan("filename")
データを読み込む その2( data.frame として取り込み )
> data <- read.table("filename")
バイナリのまま変数を読み書き
> save(hoge, file="hoge.dat")
> load("hoge.dat")
→ hoge 自体がどんな構造でも復活する!
最終更新:2012年01月22日 15:09