コマンドラインからRスクリプトを実行する


484

と呼ばれるファイルa.rがありchmod、755です。

sayHello <- function(){
   print('hello')
}

sayHello()

コマンドラインからこれを実行するにはどうすればよいですか?



5
TL; DR:ちょうどあなたのスクリプトの最初の行として追加:#!/usr/bin/env Rscript
マイケル・

回答:


671

出力をターミナルに出力する場合は、Rscriptを使用するのが最適です

Rscript a.R

R CMD BATCH a.R出力を標準出力にリダイレクトしてターミナルに表示する代わりにそれを使用すると、a.Routという新しいファイルが作成されることに注意してください。

R CMD BATCH a.R
# Check the output
cat a.Rout

Rscriptの使用に関してもう1つ注意すべき点は、methodsデフォルトではパッケージをロードしないため、混乱を招く可能性があることです。したがって、メソッドが提供するものに依存している場合は、それをスクリプトで明示的にロードする必要があります。

./a.Rスクリプトを呼び出す方法を本当に使用したい場合#!は、スクリプトの先頭に適切なものを追加できます

#!/usr/bin/env Rscript
sayHello <- function(){
   print('hello')
}

sayHello()

また、* unixシステムで実行している場合、Rへのコマンドラインパイピングを簡単に提供する便利な小さなパッケージがあることにも注意します。スクリプトを使用して光沢のあるアプリを実行するには、もっと小さなパッケージを使用する必要があるかもしれません。詳細については、この質問をご覧ください。


28
#なし!コマンドラインは、コマンドを解釈するのと同じインタープリターを使用して、コマンドラインスクリプトとして実行しようとします。ファイルが.Rまたは.rのサフィックスで終わっていても、それがRであることを認識していません。#!ファイルに含まれる言語をコマンドラインに通知します。
Spacedman 2013

4
私はここ数年、いくつかの質問を見つけ、小さい方とRscriptの両方を参照することができました。主なことは、あなたがしたように、R CMD BATCHひどいことを人々に伝えることです。それ以外のもの...
Dirk Eddelbuettel 2015年

@デイソン私もRスクリプトを使用しており、JavaプログラムからRスクリプトを実行しようとしていますが、エラーが発生します。これが私の質問です。あなたが助けることができるかどうか見てください。簡単にするために、ここではhello関数の例を使用します。
user1950349

コマンド自体のライブラリパスを変更する方法はありますか?次のようなものR CMD INSTALL -l ~/R/lib-dev
mikemtnbikes

@mikemtnbikes私が知っていることではありません。スクリプト内の.libPaths()を変更するために、常に何かを追加することができます。しかし、Rscriptのmanページで指摘されているようなオプションはありません。
Dason

107

これは質問に直接回答するものではありません。しかし、ターミナルからRのonelinerを実行したいので、誰かがここで終わるかもしれません。たとえば、不足しているパッケージをインストールして終了するだけの場合、このonelinerは非常に便利です。いくつかのパッケージを見逃してしまったことを突然見つけて、好きな場所にインストールしたいときに、私はそれをたくさん使用しています。

  • デフォルトの場所にインストールするには:

    R -e 'install.packages(c("package1", "package2"))'
  • root権限が必要な場所にインストールするには:

    R -e 'install.packages(c("package1", "package2"), lib="/usr/local/lib/R/site-library")' 

5
コマンドを実行するにRscript -e "getwd()"は、ターミナルでも使用できます。Rscriptはコマンド出力のみを出力し、完全なR起動メッセージは出力しません。
Paul Rougieux、2015

r -e "cat(getwd(),'\n')"インストールが少ない場合にも使用できます。で、この答え ダークEddelbuettelはlittlerとRscriptの違いを説明しています。
Paul Rougieux、2015

2
私の問題を予測してくれてありがとう!私はもう1つ必要でした:R -e 'install.packages("package", repos="http://cran.us.r-project.org")'
Erin

4
R -r 'options(warn=2); install...'インストールが失敗した場合に実行を停止してゼロ以外のエラーコードを取得するには、を使用する必要があります。それ以外の場合、install.packagesエラーは単なる警告です。
rvernica


21

?Rscript端末からRスクリプトを実行するには、コマンドが必要です。

http://stat.ethz.ch/R-manual/R-devel/library/utils/html/Rscript.htmlを確認してください。

## example #! script for a Unix-alike

#! /path/to/Rscript --vanilla --default-packages=utils
args <- commandArgs(TRUE)
res <- try(install.packages(args))
if(inherits(res, "try-error")) q(status=1) else q()

これは、Rスクリプトを作成/実行する方法の例にすぎません。ファイルに#!/ path / to / rscriptを追加してから、chmod + x <your script.r>および./<your script.r>
Mehul Rathod 2013

10

複数のコマンドでknitrおよびrmarkdownを使用してコマンドでRmdを実行し、HTMLファイルをRPubsにアップロードする方法

次に例を示します。2つのライブラリをロードしてRコマンドを実行します。

R -e 'library("rmarkdown");library("knitr");rmarkdown::render("NormalDevconJuly.Rmd")'

R -e 'library("markdown");rpubsUpload("normalDev","NormalDevconJuly.html")'

3
ライブラリのロードをスキップする方が簡単です。R -e 'markdown::rpubsUpload("normalDev","NormalDevconJuly.html")'
gregmacfarlane 16

3

* UnixシステムでRscriptを使用するもう1つの方法は、プロセス置換です。

Rscript <(zcat a.r)
# [1] "hello"

これは明らかに受け入れられた回答と同じですが、これにより、コマンドラインのパワーを節約せずにファイルを操作および実行できます。例:

Rscript <(sed s/hello/bye/ a.r)
# [1] "bye"

同様にRscript -e "Rcode"、ファイルに保存せずに実行することもできます。したがって、Rコードを生成するスクリプトと組み合わせて使用​​できます。例:

Rscript <(echo "head(iris,2)")
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
# 1          5.1         3.5          1.4         0.2  setosa
# 2          4.9         3.0          1.4         0.2  setosa

3

ドキュメントのためだけに、スクリプトをsudo次のように実行する必要がある場合があります。

sudo Rscript path/to/your/file.R

2
いつそれを行う必要がありますか?
simplegamer
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.