タイトルのまんまです。メモ。
きっかけ
ファイルを自動的に作成する関数を準備したり,あるいはそんな関数を含むパッケージを作っていると,「作った後にそのまま開いて即編集モードにいきたいのに…」とよく感じます。でもView()
だと編集モートにはなりません。そこで調べてみました。
utils::file.edit()
関数
Rに標準で組み込まれているutilsパッケージには,file.edit()
関数があります。これを利用するとそのシステムに依存したエディタが開くようになります。詳細は?file.edit
で確認してください。
例えば,workind directoryにkosaki.R
というファイルがあるとします。以下のコマンドを実行すると,その環境(システム)でひも付けらているエディタでそのファイルが開かれます:
file.edit("kosaki.R")
私のUbuntuのTerminal上で起動させたRで実行した場合,vimでこのファイルが開かれました。これはterminalでのエディタとしてvimを設定していたからです。おそらく各種環境では対応したものが起動するでしょう。なお,RStudio上ではRStudioのSourceペインで開かれるはずです。
rstudioapi::navigateToFile()
関数
RStudio上であれば,rstudioapiという,RStudioと対話するためのパッケージが利用可能です。この関数はRStudio上でファイルを開くための関数です。詳しくはRStudioのConsole上で?rstudioapi::navigateToFile
で確認してください。
例えば,working directory上にkosaki.R
というファイルがあるとします。以下のコマンドを実行すると,RStudioのSourceペインで編集モードとして開かれます:
rstudioapi::navigateToFile("kosaki.R")
なお,これはテキストファイルであれば大抵のファイルをテキストエディットモードで開きます。Rmdでもmdでもtexでもgvでも開きました。
どちらがいいのか?
正直なところ,なんとも言えないです。なおblogdownパッケージの内部関数であるblogdown:::open_file()
関数は,以下のように定義してありました:
# use RStudio to open the file if possible
open_file = function(x) {
tryCatch(rstudioapi::navigateToFile(x), error = function(e) file.edit(x))
}
まあblogdownはその内容から考えてもRStudioで使うことが前提と思ってもいいので,こんな感じなのかなとは思います。私自身は98%くらいRStudio上で作業するのでこれでもいい気がしますが,RStudioを利用しない方も多くいます。なので公開パッケージで組み込む際は気をつけたいなと思いました。
Enjoy