Skip to content

Instantly share code, notes, and snippets.

@diceken
Last active December 17, 2015 04:58
Show Gist options
  • Save diceken/5553933 to your computer and use it in GitHub Desktop.
Save diceken/5553933 to your computer and use it in GitHub Desktop.
granpark.rb でやったR言語のお勉強の復習

厳密なお勉強は苦手なのでニュアンスでやってます。 きちんとお勉強したい方はきちんとした方の資料読みましょう。 Mac前提だけどWindowsでも簡単に入るらしい。

Summary

  • 統計解析用の言語
  • インタプリタ型/関数型
  • 最適化すれば相当処理が速い
  • 沢山統計処理用の関数やライブラリがある
  • 通常の手続き型や関数型に比べて処理面でかなり癖がある
  • Graphの plot 機能もなかなか良い感じ
  • 行列/配列データの扱いがかなりシンプルにかける
  • オンメモリ
  • タダ

導入

http://cran.md.tsukuba.ac.jp/bin/macosx/ ダウンロードdmgをマウントしてpkgを展開してするだけ。 アプリケーションフォルダに入ってる。

文法

値の代入

x <- 100 # integer
y <- "hello" # string
z <- [1,2,3,4,5] # array
wow <- [1:1000] # serialized numbers

値の表示

x
y
z
[1,2,3,4,5]

関数定義と実行

関数を定義してオブジェクトにぶち込む

func <- function(){
    val <-runif(1000000)
    return(val)

}

呼び出す

func()

func とすると、オブジェクトの中身(functionの記述)が見える。 func()とすると、実行結果が返る。変な感じ。

良く使う関数

速度中心のコードの最適化

後で整理する

  • 条件分岐、繰り返しや添字をなるべく使わないようにする
  • 集合を関数に直接突っ込むようにすることで大きく速度の差が出る

普通の書き方

x <- runif(1000000)
test1 <- function(){
  res <- numeric(1000000)
	for(i in 1:1000000) res[i] <- exp(x[i])
	return(res)
}
system.time(test1())

より高速

x <- runif(1000000)
test1 <- function(){
res <- numeric(1000000)
res[1:1000000] <- exp(x[1:1000000])
return(res)
}
system.time(test1())

更に高速

x <-runif(1000000)
system.time(res<-exp(x))

分析ツールの使い分け

  • 小さいデータやプロダクトを複雑に -> R
  • 大きいデータを簡単に -> Hiveとか
  • 大きいデータを複雑に -> Hadoop とか

インポート/エクスポート機能

CSV/TSVは標準対応。ファイルストリームをうまく使えば何でもできることはできる

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment