サーチ…


前書き

R分析を多くの別々のデータファイルに日常的に適用したい場合や、繰り返し分析メソッドを他の人に提供したい場合は、実行可能なRスクリプトは使いやすい方法です。あなたやあなたのユーザがRを呼び出してsource(.)や関数呼び出しを介してR内のスクリプトを実行するのではなく、スクリプト自体を単にプログラムであるかのように呼び出すことができます。

備考

標準入力/出力チャンネルを表すには、関数file("stdin") (パイプ経由で端末または他のプログラムから入力)、 stdout() (標準出力)およびstderr() (標準エラー)を使用します。関数stdin()は存在しますが、 stdin()スクリプトをRに供給するときは使用できません。ユーザー入力ではなくスクリプトの次の行を読み込むためです。

スタンドアローンRプログラムの基本構造とその呼び方

最初のスタンドアロンのRスクリプト

スタンドアロンのRスクリプトは、プログラムR (WindowsではR.exe )ではなく、デフォルトでRインストールに含まれるRscriptRscript.exe )というプログラムによって実行されます。

この事実を示唆するには、スタンドアロンのRスクリプトは、以下の内容を保持しているシェバングラインと呼ばれる特殊なライン、で始まる: #!/usr/bin/env Rscript 。 Windowsでは、追加の対策が必要であり、後で詳しく説明します。

次の単純なスタンドアロンのRスクリプトは、ヒストグラムをファイル名 "hist.png"の下に、入力として受け取る数値から保存します。

#!/usr/bin/env Rscript

# User message (\n = end the line)
cat("Input numbers, separated by space:\n")
# Read user input as one string (n=1 -> Read only one line)
input <- readLines(file('stdin'), n=1)
# Split the string at each space (\\s == any space)
input <- strsplit(input, "\\s")[[1]]
# convert the obtained vector of strings to numbers
input <- as.numeric(input)

# Open the output picture file
png("hist.png",width=400, height=300)
# Draw the histogram
hist(input)
# Close the output file
dev.off()

スタンドアロンRスクリプトのいくつかの重要な要素を見ることができます。最初の行では、Shebang行が表示されます。それに続くcat("....\n")は、ユーザーにメッセージを出力するために使用されます。 file("stdin")コンソール上のユーザー入力」をデータの起点として指定する場合はいつでもfile("stdin")使用してください。これは、いくつかのデータ読み取り関数( scanread.tableread.csv 、...)でファイル名の代わりに使用できます。ユーザー入力が文字列から数値に変換されると、プロットが開始されます。そこには、ファイルに書き込まれることを意図したプロットコマンドは、2つのコマンドで囲まなければならないことがわかります。これらはこの場合png(.)dev.off()です。最初の機能は、目的の出力ファイル形式( jpeg(.)pdf(.) )で決まります。第2の関数dev.off()は常に必要です。プロットをファイルに書き込み、プロットプロセスを終了します。

スタンドアロンRスクリプトの準備

Linux / Mac

スタンドアロンスクリプトのファイルは、まず実行可能にする必要があります。これは、ファイルを右クリックして開きメニューの[プロパティ]を開き、[アクセス許可]タブの[実行可能ファイル]チェックボックスをオンにすることで実行できます。あるいは、コマンド

chmod +x PATH/TO/SCRIPT/SCRIPTNAME.R

ターミナルで呼び出すことができます。

Windows

スタンドアロンの各スクリプトでは、バッチファイルは次の内容で記述する必要があります。

"C:\Program Files\R-XXXXXXX\bin\Rscript.exe" "%~dp0\XXXXXXX.R" %*

バッチファイルは通常のテキストファイルですが、拡張子は*.txt以外の拡張子が*.batです。 notepadWordではなく)などのテキストエディタを使用して作成し、保存ダイアログでファイル名を引用符"FILENAME.bat"入れます。既存のバッチファイルを編集するには、そのファイルを右クリックして[編集]を選択します。

上記のコードをどこにでも適応させる必要がありますXXX...書かれています:

  • あなたのRインストールが存在する正しいフォルダを挿入してください
  • スクリプトの正しい名前を挿入し、このバッチファイルと同じディレクトリに置きます。

コード内の要素の説明:最初の部分"C:\...\Rscript.exe"は、WindowsにRscript.exeプログラムの検索場所を示します。 2番目の部分"%~dp0\XXX.R"は、 RscriptしたRスクリプトをバッチファイルと同じフォルダに%~dp0ます( %~dp0はバッチファイルフォルダを表します)。最後に、 %*はバッチファイルに指定したコマンドライン引数をRスクリプトに転送します。

バッチファイルをダブルクリックすると、Rスクリプトが実行されます。バッチファイルにファイルをドラッグすると、対応するファイル名がコマンドライン引数としてRスクリプトに与えられます。

littlerを使用してRスクリプトを実行する

littler (発音された小さなr )( cran )は、他の機能に加えて、littlerのrコマンドでコマンドラインからRスクリプトを実行する2つの可能性を提供します(LinuxまたはMacOSで動作する場合)。

littlerのインストール

Rから:

install.packages("littler")

ターミナルには、 rのパスが印刷されています。

You could link to the 'r' binary installed in
'/home/*USER*/R/x86_64-pc-linux-gnu-library/3.4/littler/bin/r'
from '/usr/local/bin' in order to use 'r' for scripting.

システムのコマンドラインからrを呼び出すには、シンボリックリンクが必要です。

ln -s /home/*USER*/R/x86_64-pc-linux-gnu-library/3.4/littler/bin/r /usr/local/bin/r

apt-getを使う(Debian、Ubuntu):

sudo apt-get install littler

litrと標準の.rスクリプトを使用する

rlittlerからlittlerすると、スクリプトを変更せずにスタンドアロンのRスクリプトを実行することができます。スクリプト例:

# User message (\n = end the line)
cat("Input numbers, separated by space:\n")
# Read user input as one string (n=1 -> Read only one line)
input <- readLines(file('stdin'), n=1)
# Split the string at each space (\\s == any space)
input <- strsplit(input, "\\s")[[1]]
# convert the obtained vector of strings to numbers
input <- as.numeric(input)

# Open the output picture file
png("hist.png",width=400, height=300)
# Draw the histogram
hist(input)
# Close the output file
dev.off()

スクリプトの先頭にはシバンがないことに注意してください。例えばhist.rように保存すると、システムコマンドから直接hist.rことができます:

r hist.r

有名なスクリプトでlittlerを使う

また、litblerを使用して実行可能なRスクリプトを作成することも可能です(shebangを使用します)。

#!/usr/bin/env r

スクリプトの上部に表示されます。対応するRスクリプトはchmod +X /path/to/script.r実行可能にする必要があり、システム端末から直接chmod +X /path/to/script.rことができます。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow