他のプログラミング言語を経験してからRをいじりだした人に多いと思うのですが、便利関数で簡潔に実現できる処理を、ループ処理で複雑に書いて、苦労した上に見通しとパフォーマンスが悪いコードを生成することがあります。
1
三項演算関数(ifelse
)
C言語の三項演算子に該当する関数があります。
[1] "left-side is bigger." "left-side is not bigger."
2
分岐(switch
)
Rにもswitch
文がありました。
[1] 123
[1] 456
[1] 789
ベクトル処理ができないので、まとめて処理するときにはunlistとsapplyを組み合わせるしか無いようです。
a b c
123 456 789
3 正規表現
Rでも正規表現によるテキスト処理ができます。
[1] 1 2
[1] "This is an apple."
[1] "This is a pen."
[1] "This was a pen." "This was an apple."
[[1]]
[1] "This" "is" "a" "pen."
[[2]]
[1] "This" "is" "an" "apple."
置換時の括弧の中の文字列は\\1
といったエスケープ文字と数字の組み合わせで表現されることに注意しましょう。
なお、括弧自体をマッチングしたい場合は、
[1] "括弧始...)"
と言うように括弧の前にエスケープ文字をつけます。
4 \({}_m\!C_n\)
組み合わせの数の計算ができるchoose
関数があります。コンビネーションではないので注意しましょう。
[1] 10
[1] 10
5 対話モードで動いているか調べる
interactive()
でTRUE
が戻って来た場合は対話モードで動いています。バッチ処理と対話モードで挙動を変えたいときに使えます。
6 GUIのファイル・ダイアログを使う
使いどころは乏しい気もしますが、file.choose()
でできます。
7 ソースコードの読み込み
テキストファイルに書いたソースコードを読み込んで実行できます。
UTF-8に統一されつつある昨今ですが、引数fileEncoding
で文字コードを指定して読み込むこともできます。
echo=TRUE
をつけると、実行前にコードを表示します。
引数chdir
で実行するディレクトリを指定できます。また、local=TRUE
をつけると、環境を分離してワークスペースにオブジェクトを追加しないようにできます。
8 テキストエディタの呼び出し
対話モードでテキストエディタを呼び出すことができます。環境変数EDITOR
や引数で指定しない場合、エディタはOSの標準エディタが呼ばれます。
9 オブジェクトの保存と読み込み
Rのあらゆる変数は同様に保存と読み込みができます。つまり、ベクトル、行列、配列、リスト、データフレーム、環境、関数、モデル式といったオブジェクトは、saveRDS
で保存して、readRDS
で読み込むことができます。
fnc1 <- function(a, b) (a + 1)*(b - 1) # 関数を定義
saveRDS(fnc1, "fnc.RDS") # 関数を保存
rm(fnc1) # 関数を消す
fnc2 <- readRDS("fnc.RDS") # 関数を読み込む
fnc2(2, 3) # 関数を使う
[1] 6
他のプログラミング言語でも似たようなことはできるのですが、パッケージなしで同じぐらい広範なオブジェクトを同じぐらい容易にできるものはちょっと思い当たりません。
10 ワークスペースの保存と読み込み
現在のワークスペースのすべてのオブジェクトを保存したい場合はsave.image
を用いることができます。読み込むときはload
を使います。
n <- 100
x <- 1:n
z <- runif(n, min = 1, max = 100)
y <- 1 + x - z + rnorm(n, sd = 10)
save.image(file = "example.RData")
ls() # 作成したオブジェクトを確認
[1] "n" "x" "y" "z"
character(0)
ls()
をすると、消したオブジェクトn
,x
,z
,y
が復活しているのが分かります。
なお、quit(save = "yes")
とすると、自動でsave.image
が呼び出されます。