R

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
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。