須通り
Sudo Masaaki official site
For the reinstatement of
population ecology.

遅くてもいい、まともに近似してほしい。

     

ホーム | 統計 Top | Rを便利に使うための個人的メモ

目次

現在パソコンで開いているフォルダを作業ディレクトリとしてRを起動する

OSのスタートメニューやデスクトップから通常の手続きでRのGUIを起動すると、インストール時に指定した場所が作業ディレクトリとなる。一方、研究テーマや解析ごとに異なる環境を設け、Rのデータやコマンド履歴をそのディレクトリから読込、保存させたい場合もある。できればWindowsのエクスプローラーやMac OS XのFinderなど、コンピュータのファイラーで現在開いているフォルダから一発でRを起動して、その場にあるデータを読み込ませたい。

CUIからシコシコ指定したい場合はsetwd()コマンドを使って作業フォルダを変更できるのだけど、ボタン一発でやる方法も無くはない。ただしOS依存なので注意。

Windowsの場合

起動しているRコンソール上で、

> save.image("./hoge.RData")

と打ち込む。これで現在の作業ディレクトリに、"hoge.RData"という名前のファイル(Rのワークスペースを格納したデータ)が作成される。いったんRを閉じて、このファイルを、次にRを起動したい任意のフォルダにコピーないし移動。然る後にダブルクリックすれば、それが置かれているフォルダを作業ディレクトリとしてRを起動できる。

なお、"hoge.RData"を作成した元のR環境に含まれていたデータオブジェクトは、移植先の環境にも持ち越される。これが邪魔な場合は、移植先環境で

> rm(list=ls())

と打ち込んでワークスペースを全消去してから再度RDataを保存してやれば、バニラ状態からRを始めるための種が得られる。なお下手に移植元のR環境でrm()をやると、ユーザーがこれまでに作ったデータを断捨離してしまうので注意。

Mac OS Xの場合

上記のWindowsと同様にRDataファイルのダブルクリックからRを起動しても、「データオブジェクトは再現されるが作業ディレクトリは切り替わらない」ので、この方法では実現できない。正解は、「開きたいフォルダを、Finderで掴んでDock上のRのアイコンへドラッグ&ドロップする」Dock上のRアイコンこちらのページも参照のこと

ガベージこれくしょん

ゴミが溜まったメモリ領域を解放し、暁の水平線に勝利を刻む方法。

通常の環境では
> gc();gc()

library(parallel)のマルチスレッド環境で作業をした後に(clの部分には、自分が作ったクラスターの名前を入れる)
> invisible(clusterEvalQ(cl,gc()));invisible(clusterEvalQ(cl,gc()))

gcコマンド1回ではゴミを見つけても消去までしてくれないことがあるらしく、2回打つのがコツ。

save()関数によるデータオブジェクト保存の落とし穴

Rで計算して得られるデータオブジェクトを、テキストとしての書き出しではなくR内の構造(クラス)を保ったバイナリファイルとして保存したい場合、save() という関数を使うのが通例であろう。だがオブジェクトの名前を指定する際に、若干の癖があるので注意。
たとえば幾つかの分析を自動で行なって、R環境内に以下のような名前の結果オブジェクトがあるとする。

> ls()
[1] "A.fly.result"                    "A.moth.result"    
[3] "B.fly.result"                    "B.moth.result"

このうち A.fly.result を、ローカル環境にRバイナリ形式のファイルとして保存したい。

# 目的のオブジェクトを "A.fly.dat" というファイル名でローカル保存。
chemical <- "A"
insect <- "fly"
# これは想定通りに動く。
save( A.fly, file=paste(chemical, insect, "dat", sep="."))

# 一見正しく動きそうだが、これはダメ。
save( paste(chemical, insect, "result", sep="."), file=paste(chemical, insect, "dat", sep=".") )

保存対象のRオブジェクト名を、paste()で生成した任意の文字列ベクトルで指定したいならば、save関数の第一引数にそのままベクトルを指定してもダメ。正しくは以下のように、listで括る必要がある。

# 保存対象オブジェクト名を character vector で指定するときは、list = とする必要。
save( list=paste(chemical, insect, "result", sep="."), file=paste(chemical, insect, "dat", sep=".") )

これを読み込む際は、save() に対応する関数として load() を素直に使えばいい。

chemical <- "A"
insect <- "fly"
load( paste(chemical, insect, "dat", sep=".") )

> ls()
[1] "A.fly.result" 
# R内でのオブジェクト名は、保存前のR環境で付いていた名前が復元される。

どうして保存時にlistで括らせる仕様なのか。あくまで推測だが、これは一回のsaveで保存対象とするオブジェクトが、複数ある場合に備えてである。たとえばR環境内の全てのオブジェクトを保存する操作は save( list=ls(), file="all.dat" ) となる。

参考
R help > assigning and saving datasets in a loop, with names changing with "i"
R Documentation > Save R Objects

お使いのコンピュータのプラットフォームをR環境内で取得する方法

こちらのページより。

WINDOWS <- .Platform$OS.type == "windows"

if (WINDOWS) { 
    print("Hello, world.")
} else {
    print("Hello, world.")
}