仅当条件满足时,才从命令提示符创建并运行R脚本的批处理文件

时间:2015-12-03 07:46:05

标签: r batch-file rscript

我需要做以下事情:

1)从R脚本(我们称之为sample1.r),我将得到一个变量updated和一个向量dates
2)现在我需要做的是,如果条件满足(if updated == 1),我需要通过传递来自向量dates的参数来运行R脚本的批处理文件。 R脚本的批处理文件看起来像这样。

Rscript D:/sample2.r "2015-05-01 00:00:00" dates[1] dates[2]    #statements 1
Rscript D:/sample2.r "2015-05-11 00:00:00" dates[2] dates[3]    #statements 2
Rscript D:/sample2.r "2015-05-21 00:00:00" dates[3]             #statements 3  

如上所示,如果条件满足,我将创建一个批处理文件。首先,我得到一个向量dates,然后将此向量的元素作为arguments传递给脚本sample.r。我将2个参数传递给前2次运行,1个参数传递给第3次运行。

作为解决方案,我可以使用paste0函数在R本身中创建这些语句,但之后如何将这些语句转换为批处理文件并仅在条件满足时从命令提示符触发它们?可能有一个更容易的解决方案,但我不知道。有人可以帮帮我吗?

1 个答案:

答案 0 :(得分:0)

您可以使用source来调用外部脚本。

if(update == 1){
    source("D:/sample2.r")
    FunctionName("2015-05-01 00:00:00", dates[1], dates[2])
    FunctionName("2015-05-11 00:00:00", dates[2], dates[3])
    FunctionName("2015-05-21 00:00:00", dates[3])
}

source将调用并运行外部脚本。如果您编写的脚本没有函数,它将完全运行脚本。在这种情况下,我建议将其拆分为函数。这样您就可以调用要在该脚本中调用的任何函数名称。您可以编写一个if语句来调用脚本和函数。 注意:如果两个脚本包含相同的函数名称,则可能会产生冲突,例如:主

如果要调用脚本并传递局部变量:

source("D:/sample2.r", local=TRUE)

但是,如果您想以前面提到的方式调用脚本,可以使用system

if(update == 1){
    system(paste('Rscript D:/sample2.r "2015-05-01 00:00:00"', dates[1], dates[2], sep=" "))
    system(paste('Rscript D:/sample2.r "2015-05-11 00:00:00"', dates[2], dates[3], sep=" "))
    system(paste('Rscript D:/sample2.r "2015-05-21 00:00:00"', dates[2], sep=" "))
}