微生物屋のノート

プログラミング・解析関連についてのノートです。

.Rprofileで、R起動時に自作functionを読み込む方法

最近までRprofileの使い方がわかりませんでした。
しかし、研究室の後輩がさらっと、Rprofileを使って警告を出ないように設定していると聞いて、なんやてとなったので、調べてみました。

めちゃくちゃ簡単だし、下記のサイトたちにまとめてありますね。
OSによって、設定の仕方が違うようです。
stats.biopapyrus.jp
blog.livedoor.jp


起動時に設定されるworking directory に、.Rprofile を入れたらいいだけのようです。

以下では、上の二つのサイトをまとめた話をします。
また、それだけだと寂しいので、いくつか自作functionを載せておきます。



1. '.Rprofile'を見えるようにする

問題は、通常では.Rprofileが見えないということ。
見えなくても使えるけど、見えた方が後々編集しやすい。

そのために、Terminalを開いて

defaults write com.apple.finder AppleShowAllFiles YES
killall Finder /System/Library/CoreServices/Finder.app

と入力。そうすると、不可視ファイルが見えるようになります。

ただ、フォルダの中身がごちゃごちゃするので、それが嫌な人は

defaults write com.apple.finder AppleShowAllFiles NO
killall Finder /System/Library/CoreServices/Finder.app

にして、通常は消しといてください。

2. Working directoryの確認

Rを開きます。

getwd()

と入力して、Working directoryを確認します。

Macならば、Finderの一番下、家マークのDirectoryにきていると思います。
f:id:alhazerd-fx:20201117181100p:plain

3. '.Rprofile'を作成する

書き方は、R言語で書くことができます。

例えば、いつも同じlibraryを読み込みたいと言うならば、適当なメモ帳なり、TextEditorを開いて、

library(ggplot2)

と書いたファイルを、.Rprofileと言う名前で、getwd()で確認した場所に保存。

これだけで、常に、Rを起動時にggplot2というパッケージが自動で読み込まれるようになります。



では、.Rprofileの中に書き込んだら便利かなというfunctionを紹介します。

複数library を一回で読み込むと同時に、もし、そのpackageが install されていなかったら、自動で installするfunctionです。

load.lib <- function (libs, install=FALSE) 
{	
  ####################################
  ##
  ## libs に、パッケージの名前。複数可能
  ## install で、installするかどうかを決めます。
  ## install=FALSEで、自動インストールをしないです。
  ##
  ####################################

  if(install){
		lib.all <- library()
		lib.name <- lib.all$results
		if(sum(libs %in% lib.name )!=length(libs)){
			
			installed <- which(libs %in% lib.name)
			uninstalled <- libs[-installed]
			
			invisible(lapply(uninstalled, function(x) invisible(install.packages(package = x))))
		}
	}
    invisible(lapply(libs, function(x) invisible(library(package = x, 
                                                         character.only = TRUE))))
    invisible(sapply(libs, function(x) cat(sprintf("%s %s\n", 
                                                   x, packageVersion(x)))))
}

使い方の例

> load.lib( c("ggplot2", "tidyr", "vegan"), install=FALSE)

Loading required package: permute
Loading required package: lattice
This is vegan 2.5-6
ggplot2 3.3.2
tidyr 1.1.2
vegan 2.5.6

以上のように、c() でくくってやれば、複数のパッケージを同時に読み込むことができます。
もちろん、くくらなくても"ggplot2"だけ放り込んでも動きます。

また、論文を書く上で、package情報を知っておく必要があると思います。
なので、パッケージversionもoutputできるようにしています。

この関数の前に、sink()をかましてやれば、自動でテキストファイルに落とすことも可能ですね。