【问题标题】:Call a function in R Script from a Batch file从批处理文件调用 R 脚本中的函数
【发布时间】:2016-11-17 03:15:06
【问题描述】:

我有一个调用 R 脚本的批处理文件。它工作正常。我需要知道如何从 Windows 中的批处理文件调用 R 脚本中的函数?如何使用参数调用此函数:

PNLCalcMultipleDatesClient("2010-10-03", "2010-10-05", "XYZ")

此命令行有效,但它没有 R 脚本中的函数调用。你能帮我在 Windows 中修改这个命令行并调用上面的函数吗?

"\\C1PRDTLS01.axinc.com\Dev\RiskClient\inputCData\PNLCalculation\R\R-3.1.1\bin\R.exe" CMD BATCH --no-save --no-restore "\\C1PRDTLS01.axinc.com\Dev\RiskClient\inputCData\PNLCalculation\RScript\RadarPNLTimeseries.R" 

这里是 R 脚本:

PNLCalcMultipleDatesClient("2010-10-03", "2010-10-05", "Dunavant")

PNLCalcMultipleDatesClient <- function(begindate, enddate, Client)
{
  # Do some operation here....
  .....
  ......

}

【问题讨论】:

    标签: r windows function batch-file command-line


    【解决方案1】:

    这是一个例子。这是我拥有的 Rscript,我倾向于将它们保存为 txt 本身。

    ## Rscript: Passing arguments to the Rscripts likes args[i] 
    #!/usr/bin/env Rscript
    args = commandArgs(trailingOnly=TRUE)
    print(1:args[1])
    df=data.frame(1:args[1])
    write.csv(df, args[2])
    

    然后您的批处理文件将如下所示。然后将这些参数直接提供给 cmd 或从中创建一个批处理文件。

    echo off
    Rscript rparam.txt 1000 out.csv
    

    对于您的情况,您的 Rscript(R_with_par.R) 将是:

    #!/usr/bin/env Rscript
    args = commandArgs(trailingOnly=TRUE)
    x1=args[1]
    x2=args[2]
    x3=args[3]
    PNLCalcMultipleDatesClient <- function(begindate, enddate, Client)
    {
        # Do some operation here....
        .....
        ......
    
    }
    
    PNLCalcMultipleDatesClient(as.Date(x1), as.Date(x2), as.character(x3))
    

    你的 CMD 命令是:

    Rscript R_with_par.R 2010-10-03 2010-10-05 Dunavant
    

    您必须确保您传递的参数是 R 所需的格式。如果您不在同一目录中,请提供 R 脚本的路径。另外Rscript 是比R CMD 更好的选择。

    【讨论】:

    • 谢谢。我知道如何调用 R 脚本。我的问题是如何从命令行调用 R 脚本中的函数。有什么办法吗?或任何主函数或 R 中存在的东西,它会像 Java 或 C# 一样自动调用?
    • 我认为你不能从 cmd 调用 r 函数。您需要将该函数放入 R 脚本中,然后调用它。
    • 在这种情况下,如何将参数传递给该函数?假设在我的 R 脚本中我有几个函数,functionA(arg1, arg2), functionB(arg1, arg2) 等。如果我从 cmd 传递这些参数,R 脚本将如何理解要传递的函数?
    • @查看我的编辑。我从 cmd 传递 args[1], args[2]。我想你必须为不同的功能给出不同的参数。此外,R 没有在调用其他类之前需要调用的主类。
    • 我了解,但由于我是 R 新手,所以无法完全关注您。我修改了我的第一篇文章并添加了我的 R 脚本。你能帮我修改R脚本并像你推荐的那样传递三个参数吗?
    【解决方案2】:
    1. 创建 R 函数:

      平方

    平方(as.integer(commandArgs(trailingOnly = TRUE)))

    1. 从命令提示符运行 R 脚本:(您的路径可能不同)

      C:R/bin/RScript.exe" "C:/Rscript/command_line.R" 100 注意:第一个参数是 Rscript.exe 的路径,第二个参数是你的 R 脚本的路径,第三个参数是函数参数。

    【讨论】:

      猜你喜欢
      • 2012-07-18
      • 2014-10-14
      • 2015-11-30
      • 1970-01-01
      • 2013-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多