1. ホーム
  2. r

[解決済み] Rスクリプトをコマンドライン(ターミナル)で使用するにはどうしたらよいですか?

2022-08-10 11:56:06

質問

コマンドラインから簡単なプロットを行うためのRスクリプトがあると非常に便利です。 しかし、bashスクリプトからRを実行するのは全く便利ではありません。 理想は次のようなものでしょう。

#!/path/to/R
...

または

#!/usr/bin/env R
...

というのがありますが、どちらもうまくいっていません。

もう一つの選択肢は、スクリプトを純粋にRに保つことです、例えば script.R で起動し R --file=script.R などで呼び出すことができます。 しかし、時にはスクリプトが不明瞭なコマンドラインスイッチに依存し、その時点でコードの一部がスクリプトの外に存在することがあります。 例: ローカルの .Rprofile を使って bash から R に何かをこっそり入れる場合、必要なスイッチはすべて次のようになります。 --vanilla を除くすべてを意味します。 --no-init-file .

もう一つの選択肢は、Rフラグを保存して苦もなく実行可能なbashスクリプトで、Rスクリプトを呼び出すことです。 問題は、この場合、1つのプログラムが2つのファイルに分割され、同期を取り、新しいマシンに一緒に転送する必要があることです。

私が現在最も嫌っているオプションは、bash スクリプトに R を埋め込むことです。

#!/bin/bash
... # usage message to catch bad input without invoking R
... # any bash pre-processing of input
... # etc
R --random-flags <<RSCRIPT
# R code goes here
RSCRIPT

すべてが1つのファイルに収まっています。 実行可能で、簡単に引数を扱えます。 問題は、このようにbashとRを組み合わせることで、どのIDEもどちらかで失敗しない可能性をかなり排除してしまうことで、私の心はとても痛むのです。

私が見逃している何か良い方法があるのでしょうか?

どのように解決するのですか?

の内容 script.r :

#!/usr/bin/env Rscript

args = commandArgs(trailingOnly = TRUE)
message(sprintf("Hello %s", args[1L]))

最初の行は の行です。 . を使用するのがベストプラクティスです。 /usr/bin/env Rscript を使うのがベストプラクティスです。そうしないと、他のコンピュータでスクリプトが壊れる危険性があります。

次に、(コマンドラインで)実行可能なものにします。

chmod +x script.r

コマンドラインからの起動。

./script.r world
# Hello world