非常に基本的な質問があります。
私はRの新しいユーザーです。最近、分析に1つのRパッケージを使用しています。目的の出力を取得するには、そのパッケージのRコマンドのリストを実行する必要があります。分析パイプラインを作成して自動化し、必要なパラメーターを使用して1つのRコマンドを使用して作業を実行できるようにします。
シェルスクリプトで行うこのようなタイプの作業(Linuxコマンドの数、awk / sed /perl行を追加します)
これを行う方法についてのリンクを教えてください。ありがたいです。
非常に基本的な質問があります。
私はRの新しいユーザーです。最近、分析に1つのRパッケージを使用しています。目的の出力を取得するには、そのパッケージのRコマンドのリストを実行する必要があります。分析パイプラインを作成して自動化し、必要なパラメーターを使用して1つのRコマンドを使用して作業を実行できるようにします。
シェルスクリプトで行うこのようなタイプの作業(Linuxコマンドの数、awk / sed /perl行を追加します)
これを行う方法についてのリンクを教えてください。ありがたいです。
これが私の分析パイプラインであると仮定します。平均MUと標準偏差SDを使用して正規分布から10個の数値を生成し、それらを使用して別のことを実行したいとします。
MU <- 1 # the mean
SD <- .5 # standard deviation
NUMBER_TO_GENERATE <- 10
x <- rnorm(NUMBER_TO_GENERATE, mean=MU, sd=SD)
# ... more analysis here.
現時点では、これらのコマンドをコピーしてR端末に貼り付けています。これを「自動化」する方法はいくつかあります。
実行するコマンドのリストを1つの大きな関数にまとめ、パラメーターを関数パラメーターとして配置します。
myFunction <- function( MU, SD, NUMBER_TO_GENERATE ) {
x <- rnorm(NUMBER_TO_GENERATE, mean=MU, sd=SD)
# ... rest of analysis
}
これで、RI内で実行できるようmyFunction(1, .5, 10)になり、入力する必要のあるコマンドの数が1に減ります。
スクリプトファイルを書くことができましたmyScript.r。これは、Rコマンドのリストであることを除けば、bashスクリプトに似ています。
元のコマンドのリストをそこに配置するか、関数をそこに追加して下部に追加のステートメントを配置することができますmyFunction(1,.5,10)。
次に、 R内から、次のことができます。
source('myScript.r')
スクリプト内のすべてのRコマンドを実行します。
このスクリプトをシェルから取得する場合はmyScript.r、関数を含むファイルを作成することをお勧めします。
次に、 Rscriptをチェックアウトします(R内からのみ実行できます?Rscript)。これはデフォルトでRがインストールされており、unix/windowsコマンドラインからRコマンドを実行するために使用します。
例えば:
[mathematical.coffee@bar ~]$ Rscript -e '1+1'
[1] 2
特に、方法1)と2)を組み合わせて、Rscript次のようなことを行うことができます。
[mathematical.coffee@bar ~]$ Rscript -e 'source("myScript.R"); myFunction( 1, .5, 10 )'
関数を実行します。
または、もちろん、をに含めることもできmyFunction(1, .5, 10)ます。myScript.Rその場合は、を行うことができますRscript myScript.R。
前者の利点は、シェルスクリプトを実行したい場合です(質問でbashスクリプトについて言及したため、これについてのみ言及します)。bashスクリプトでは、次のようなことができます。
#!/bin/bash
MU=1;
SD=.5;
NUM=10;
Rscript -e "source('myScript.r'); myFunction($MU,$SD,$NUM)"
ただし、bashスクリプトとRスクリプトを混在させないことを主張したいと思います。前述したように、質問でbash / unixスクリプトについて言及したため、このオプションについてのみ言及します。
関数はおそらくあなたが探しているものです
foo <- function() {
data <- data.frame(a=1:10, b=10:1)
plot(data)
# many more commands here
}
その後、呼び出すだけfoo()ですべてのコマンドが実行されます。
詳細については、Rヘルプを参照してください。
またsource()、興味があるかもしれません。を参照してください?source。
もう1つのオプションは、Rscriptを使用してプログラムを実行することです。コマンドラインからの引数は、関数を使用してアクセスできますargs <- commandArgs(trailingOnly=TRUE)(リストとして返されます)
たとえば、上記のmathically.coffeeの例を使用すると、スクリプトは次のようになります。
詳細については「contributors()」と入力し、出版物でRまたはRパッケージを引用する方法については「citation()」と入力してください。
args <- commandArgs(trailingOnly=TRUE)
MU <- as.numeric(args[[1]]) # the mean
SD <- as.numeric(args[[2]]) # standard deviation
NUMBER_TO_GENERATE <- as.integer(args[[3]])
rnorm(NUMBER_TO_GENERATE, mean=MU, sd=SD)
doOtherStuff(x)
次に、次のように関数を呼び出すことができますRscript myscript.R 2.0 0.1 100
引数(--filenameなど)を使ってもっと凝ったことをしたい場合は、optparseライブラリを使用できます。http://www.r-bloggers.com/passing-arguments-to-an-r-script-from-command-lines/