从命令行运行R代码(Windows)

时间:2010-08-17 19:08:16

标签: windows command-line r

我在一个名为analyse.r的文件中有一些R代码。我希望能够从命令行(CMD)运行该文件中的代码,而不必通过R终端,我也希望能够传递参数并在我的代码中使用这些参数,像下面的伪代码:

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

这将执行脚本并将“C:\ file.txt”作为参数传递给脚本,然后它可以使用它来对其进行进一步处理。

我如何做到这一点?

4 个答案:

答案 0 :(得分:28)

  1. 您想要Rscript.exe

  2. 您可以在脚本中控制输出 - 请参阅sink()及其文档。

  3. 您可以通过commandArgs()访问命令参数。

  4. 您可以通过getoptoptparse软件包更精细地控制命令行参数。

  5. 如果其他一切都失败了,请考虑阅读manualscontributed documentation

答案 1 :(得分:5)

确定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

答案 2 :(得分:3)

有两种方法可以从命令行(windows或linux shell)运行R脚本。

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 shell上运行以下命令     Rscript a.R /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 shell上运行以下命令     Rscript a.R /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 + x a.R 并再次运行第二个示例     ./a.R /home/impadmin/test.csv rows 2

这也适用于Windows命令提示符..

答案 3 :(得分:0)

将以下内容保存在文本文件中

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"