web-dev-qa-db-ja.com

コマンドラインからのRコードの実行(Windows)

Analyse.rというファイル内にRコードがあります。コマンドライン(CMD)から、Rターミナルを介さずにそのファイル内のコードを実行できるようにしたいと思います。また、パラメーターを渡してコードでそれらのパラメーターを使用できるようにしたいのですが、何か次の擬似コードのように:

C:\>(execute r script) analyse.r C:\file.txt

これにより、スクリプトが実行され、 "C:\ file.txt"がパラメーターとしてスクリプトに渡され、それを使用してさらにいくつかの処理を実行できます。

どうすればこれを達成できますか?

25
ExtremeCoder
  1. _Rscript.exe_が必要です。

  2. スクリプト内から出力を制御できます。sink()とそのドキュメントを参照してください。

  3. コマンド引数にはcommandArgs()を介してアクセスできます。

  4. getopt および optparse パッケージを使用して、コマンドライン引数をより細かく制御できます。

  5. 他のすべてが失敗した場合は、 manuals または contributed documentation を読むことを検討してください

32

Rがインストールされている場所を特定します。ウィンドウ7の場合、パスは

1.C:\Program Files\R\R-3.2.2\bin\x64>
2.Call the R code
3.C:\Program Files\R\R-3.2.2\bin\x64>\Rscript Rcode.r
6
guns

コマンドラインからRスクリプトを実行する方法は2つあります(WindowsまたはLinuxシェル)。

1)R CMD方法R CMD BATCHの後にRスクリプト名。この出力は、必要に応じて他のファイルにパイプすることもできます。

ただし、この方法は少し古く、Rscriptの使用が一般的になっています。

2)Rscriptの方法(これはすべてのプラットフォームでサポートされています。次の例はLinuxでのみテストされています)この例では、csvファイルのパス、関数名、およびこのファイルが含まれるcsvファイルの属性(行または列)インデックスを渡します。機能するはずです。

Test.csvファイルの内容x1、x2 1,2 3,4 5,6 7,8

内容が次のRファイル「a.R」を作成します。

#!/usr/bin/env Rscript

cols <- function(y){
   cat("This function will print sum of the column whose index is passed from commandline\n")
   cat("processing...column sums\n")
   su<-sum(data[,y])
   cat(su)
   cat("\n")
}

rows <- function(y){
   cat("This function will print sum of the row whose index is passed from commandline\n")
   cat("processing...row sums\n")
   su<-sum(data[y,])
   cat(su)
   cat("\n")
}
#calling a function based on its name from commandline … y is the row or column index
FUN <- function(run_func,y){
    switch(run_func,
        rows=rows(as.numeric(y)),
        cols=cols(as.numeric(y)),
        stop("Enter something that switches me!")
    )
}

args <- commandArgs(TRUE)
cat("you passed the following at the command line\n")
cat(args);cat("\n")
filename<-args[1]
func_name<-args[2]
attr_index<-args[3]
data<-read.csv(filename,header=T)
cat("Matrix is:\n")
print(data)
cat("Dimensions of the matrix are\n")
cat(dim(data))
cat("\n")
FUN(func_name,attr_index)

LinuxシェルRscript aR /home/impadmin/test.csv cols 1で次を実行すると、コマンドラインで次のように渡されます/home/impadmin/test.csv cols 1マトリックスは次のとおりです:x1 x2 1 1 2 2 3 4 3 5 6 4 7 8行列の次元は4 2です。この関数は、コマンドライン処理から渡されたインデックスを持つ列の合計を出力します...列の合計16

LinuxシェルRscript aR /home/impadmin/test.csvの行2で次を実行すると、コマンドラインで次のように渡されます/home/impadmin/test.csv行2マトリックスは次のとおりです:x1 x2 1 1 2 2 3 4 3 5 6 4 7 8行列の次元は4 2この関数は、コマンドライン処理からインデックスが渡された行の合計を出力します...行の合計7

次のようにRスクリプトを実行可能にすることもできます(Linuxの場合)chmod a + xa.R。2番目の例を./a.R /home/impadmin/test.csvの行2として再度実行します。

これは、Windowsコマンドプロンプトでも機能します。

4
rupali

以下をテキストファイルに保存します

f1 <- function(x,y){
print (x)
print (y)
}
args = commandArgs(trailingOnly=TRUE)
f1(args[1], args[2])

いいえwindows cmdで次のコマンドを実行しません

Rscript.exe path_to_file "hello" "world"

これは以下を印刷します

[1] "hello"
[1] "world"
0