fugagaの備忘録

しがないプログラマの備忘録。好きなモノ:機械学習、Linux、vim、C/C++、Scala、php、CakePHP、python

R言語 入門

統計処理に使われるR言語ですが、プログラミング言語としての入門サイトがなかったのでつくりました。
C/C++pythonといったメジャーな言語を習得したプログラミング中級者以上向けに、ポイントのみ解説します。

Hello world

"Hello world"

と打てば終わり。勝手に表示される。

print("Hello world")

でもいけるが、上と効果がまったく同じ。任意のオブジェクトをこんな感じで表示できる。

ちなみに、上は、”オブジェクトを評価した結果が表示される”だけなので、きちんと出力するためには、catを使う。

cat("Hello world\n")

ちなみに、catも任意のオブジェクトを表示できる。

R言語において、C/C++のprintfっぽく使える関数は、sprintf。使い方はC/C++のsprintfと同じで、フォーマット文字列 -> 文字列 関数。

sprintf("%2.3f\n", 1.3)

以上をまとめると、C言語における、printf("Hello world")をそのまま書くとすると、

cat(sprintf("Hello world\n"))

という感じ。

コメント

”#”でコメントアウトできる

# コメント1
a <- 1 # コメント2

変数

R言語における変数の概念は、C/C++みたいなのじゃなく、pythonみたいな感じ。代入は、

a <- 10

という形で書ける。基本的に、セミコロンは不要だが、複数命令を1行で書くときは、

a <- 10; b <- 20

という形で使う。

pythonのように、型宣言なしで使えて、

a <- 10
a <- "hoge"

というように、型を変えた代入も可能。
空のオブジェクトで初期化することもできる。

a <- numeric()

タイプ、モード、ストレージモード、クラス、というややこしい概念がある。理解しなくても使える気がする。
ややこしい概念を飛ばして、基本的な型を、ざっくり書くと以下の感じ。

型名 意味
logical 論理型
numeric 数値型
integer 整数型
double 浮動小数点型
complex 複素数
character 文字列型

配列(ベクトル)

R言語にも、配列(array)はあるが、まずはベクトルを習得した方がベターかも。ということで、ここではベクトルの説明。注意点としては、R言語において、添字が0からでなく、1から始まること。

基本的な使い方

a <- c(2,4,8,10,13) # 初期化
a[1:3] # 1番目から3番目の要素 => 2,4,8
a[-c(3,5)] # 3番目と5番目を除く要素
length(a) # サイズ

pythonのディクショナリっぽくも使える。

a <- c(1,2,3) # 初期化
names(a) <- c("piyo","fuga","hoge") # 名前をつける
a["hoge"] # => 3
a[c("piyo","hoge")] # => 1 3

演算をまとめて実行できる。

a <- c(1,2,3) # 初期化
a * 2 # => 2 4 6
sum(a) # => 6
a > 2 # => FALSE FALSE TRUE
a[ a > 2 ] # => 3

要素の追加・挿入・削除・置換

a <- 1:4 # 初期化
a[length(a)+1] <- 5 # 追加(新たにオブジェクトを作成しない)
a <- c(a, 4) # 追加(新たにオブジェクトを作成する)
a <- append(a, 1, after=3) # 挿入(新たにオブジェクトを作成する)
a <- a[-2] # 削除(新たにオブジェクトを作成する)
a <- replace(a, c(2,4), c(0,0)) # 置換(新たにオブジェクトを作成する) 2番目と4番目の要素を0に置換する

演算子

演算子 意味
+ 加算
- 減算
* 乗算
/ 除算
^ (**) べき乗
%% 剰余
%/% 整数除算

制御文

条件分岐

執筆中・・・

ループ

執筆中・・・

関数

執筆中・・・

クラス

執筆中・・・

オーバーロード

S3クラス、というものを使って、いわゆるオーバーロードを実現できる。

キャスト

as.vector(hoge), as.integer(hoge),...という形で書ける。

例外制御

言語オブジェクト

文字列を関数に変換できる機能。

コンソールコマンド

getwd() # 現在のディレクトリを表示
setwd("../") # ディレクトリを移動
list.files() # ファイル一覧を表示
source("hoge.R") # Rスクリプトの実行