2

非常に基本的な質問があります。

私はRの新しいユーザーです。最近、分析に1つのRパッケージを使用しています。目的の出力を取得するには、そのパッケージのRコマンドのリストを実行する必要があります。分析パイプラインを作成して自動化し、必要なパラメーターを使用して1つのRコマンドを使用して作業を実行できるようにします。

シェルスクリプトで行うこのようなタイプの作業(Linuxコマンドの数、awk / sed /perl行を追加します)

これを行う方法についてのリンクを教えてください。ありがたいです。

4

3 に答える 3

14

これが私の分析パイプラインであると仮定します。平均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.関数を書く

実行するコマンドのリストを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に減ります。

2.スクリプトを書く

スクリプトファイルを書くことができましたmyScript.r。これは、Rコマンドのリストであることを除けば、bashスクリプトに似ています。

元のコマンドのリストをそこに配置する、関数をそこに追加して下部に追加のステートメントを配置することができますmyFunction(1,.5,10)

次に、 Rから、次のことができます。

source('myScript.r')

スクリプト内のすべてのRコマンドを実行します。

3.シェルから

このスクリプトをシェルから取得する場合は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スクリプトについて言及したため、このオプションについてのみ言及します。

于 2012-04-26T06:31:11.850 に答える
2

関数はおそらくあなたが探しているものです

foo <- function() {
 data <- data.frame(a=1:10, b=10:1)
 plot(data)

  # many more commands here
}

その後、呼び出すだけfoo()ですべてのコマンドが実行されます。

詳細については、Rヘルプを参照してください。

またsource()、興味があるかもしれません。を参照してください?source

于 2012-04-26T06:15:36.433 に答える
0

もう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/

于 2016-04-01T07:14:42.097 に答える