Rの自作関数の読み込みと、読み込んだ関数をRStudioのグローバル環境に表示させない方法について。
前回紹介したような自作関数はスクリプト内に毎回記述するのではなく、自作関数をまとめておくための専用のRファイルを別に用意してその中に記述しておき、それをスクリプト冒頭で読み込ませるというやり方をするのが便利です。でないと同じ関数を毎回書くことになりスクリプトが不必要に冗長になってしまいます。
新しいRファイルを作成して以下の内容(前回紹介したクリア関数です)を記述し、これを例えば my_functions.R などの名前で保存します。
clearConsole = clc = function(){ # Clear console messages cat( "\014" ) } clearPlots = function () { # Clear plots if( dev.cur() > 1 ) dev.off() } clearWorkspace = function () { # Clear global workspace rm( list = ls( envir = globalenv() ), envir = globalenv() ) } clearAll = function(){ # Clear console, plots, and workspace clearConsole() clearPlots() clearWorkspace() }
次に、新しいRスクリプトを作成し、先ほどの my_functions.R を読み込みます(下記の2行目)。
source 関数の引数の値は先ほど保存した my_functions.R の場所に自分で書き換えて下さい。
正しく読み込めていれば、4行目のプリント文のメッセージは5行目によって消されてしまいコンソールには表示されないはずです。
# Load a script source( "/Users/username/my_functions.R" ) # Check print( "Siren's song here" ) clearConsole()
よく使う関数は全て my_functions.R の中に記述しておき、毎回のスクリプトではそれを読み込ませるようにすれば、個別のスクリプトを簡潔に保つことができます。
ところで、このやり方の1つの気に障る点として、読み込んだ自作関数がグローバル環境に表示されてしまうというのがあります(画像:こういうこと)。自作関数の数が少ないうちはそれでもいいかもしれませんが、10や20と増えてくるとグローバル環境がごちゃついてしまいよろしくありません。
以下のようなやり方で読み込みを行うことで、グローバル環境を汚さずにスクリプトを読み込むことができます。
# Load a script .myfunc.env = new.env() sys.source( "/Users/username/my_functions.R", envir = .myfunc.env ) attach( .myfunc.env ) # Check print( "Siren's song here" ) clearConsole()
.myfunc.env という名前で環境を作成し、その環境へスクリプトを読み込み、最後にこの環境を有効化しています。環境名は何でもOKですが、ピリオドから始まる名前にしておかないとグローバル環境に表示されてしまいます。sys.source 関数の引数の値は先ほどと同様、自分の my_functions.R の場所に書き換えて下さい。
最初に示した source 関数を使ったやり方に比べると、妙にややこしい感じになってしまいました(1行で済んでいたものが3行も必要になった)。それに、毎回こんなややこしいものをスクリプトの冒頭に書くのも気味が悪いです。そこで、この3行の読み込み処理を R に自動でやらせるようにしましょう。RStudio を起動した際に自動でスクリプトを実行させるようにすれば、毎回のスクリプト内には読み込み処理を何も書く必要が無くなります。これでもう読み込み処理がどうこうと考える必要も無くなって、複雑さから解放されますね。
コメント